我正在尝试为一个数字数组生成所有排列并将返回作为列表返回。我假设因为函数是递归的,所以我不能在DoPermute
方法本身中声明要返回的 List<>,所以我将 List<> 定义为Permutation
. 该类的代码如下所示:
class Permutation
{
// Constructors
public Permutation()
{
}
// build permutations of input array
public void DoPermute(ref byte[] digits, ref int n, ref int i)
{
if (i == n)
{
long temp = Numbers.JoinDigits(digits);
Permutations.Add(temp);
}
else
{
for (int j = i; j < n; j++)
{
SwapValues(ref digits, ref i, ref j);
int temp = i + 1;
DoPermute(ref digits, ref n, ref temp);
SwapValues(ref digits, ref i, ref j);
}
}
}
public List<long> Permutations { get; set; }
}
我正在使用以下行调用代码,但出现错误。
byte[] num = { 1, 2, 3, 4, 5 };
int len = num.Length;
int zero = 0;
Permutation p = new Permutation();
p.DoPermute(ref num, ref len, ref zero);
List<long> permuts = p.Permutations;
但是,如果将DoPermute
方法重新声明为静态并Permutations.Add(temp);
用简单的替换,Debug.WriteLine(temp);
我确实得到了正确的排列列表。
关于我哪里出错的任何建议?