数字の配列のすべての順列を生成し、戻り値をリストとして返そうとしています。関数は再帰的であるため、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);
私が間違っている場所に関する提案はありますか?