数が2でnが3だとしましょう。
出力は次のようになります。
[2, 0, 0][0, 2, 0][0, 0, 2][1, 1, 0][1, 0, 1][1, 0, 1][0, 1, 1]
nが2の場合、出力は次のようになります。
[2, 0][0, 2][1, 1]
さて、再帰を使用してメソッドを作成しようとしましたが、ほとんど成功しました。
これが方法です。
public static void divideANumberIntoNNumbers(int number, int n) {
try {
for (int i = number; i >= 0; --i) {
System.out.print(i + " ");
int x = n - 1;
if (x > 0) {
divideANumberIntoNNumbers(number - i, x);
} else {
return;
}
}
} finally {
System.out.println();
}
}
以下は私が得た出力です。
number = 4 および n = 2 の場合:
4 0
3 1
2 2
1 3
0 4
number = 4 および n = 3 の場合:
4 0 0
3 1 0
0 1
2 2 0
1 1
0 2
1 3 0
2 1
1 2
0 3
0 4 0
3 1
2 2
1 3
0 4
2 番目の出力で、強調表示された部分が表示される場合、順列はおよび2 2 0
です。2 1 1
2 0 2
順列をデータ構造に格納できるように、メソッドにどのような変更を加える必要があるかを知りたいList<List<Integer>>