我有一个包含一些对象的数组列表,我必须得到这些对象的排列?我该怎么做?假设 MyList 是一个包含 4 个对象的数组列表。
ArrayList myList = new ArrayList();
myList.Add(1);
myList.Add(2);
myList.Add(3);
myList.Add(4);
所以arraylist计数是4所以我想要4!= 24我想要那个对象的24个排列。我怎么能在 C# 中做到这一点。请帮助我。
谢谢!
我有一个包含一些对象的数组列表,我必须得到这些对象的排列?我该怎么做?假设 MyList 是一个包含 4 个对象的数组列表。
ArrayList myList = new ArrayList();
myList.Add(1);
myList.Add(2);
myList.Add(3);
myList.Add(4);
所以arraylist计数是4所以我想要4!= 24我想要那个对象的24个排列。我怎么能在 C# 中做到这一点。请帮助我。
谢谢!
斯坦福“编程抽象”课程的这个讲座很好地解释了递归解决方案。
你可以用可爱的递归来做到这一点。
基本情况:大小为 1 的数组的排列是数组本身。
递归情况:大小为 n 的数组的排列是,大小为 (n - 1) 的每个排列,在每个可能的位置添加第 n 个项目。
那有意义吗?
可能是这样的,虽然没有测试。
public static IEnumerable<string> permute(string s){
if (s.Count() > 1)
return from c in s
from p in permute(s.Remove(s.IndexOf(c), 1))
select string.Format("{0}{1}", c, p);
else
return new string[] { s };
}
这是一篇很好的文章,深入介绍了 next_permutation 的 C++ 实现。是的,它是用 C++ 编写的,但语法并没有太大的不同,而且解释也足够好。干杯。