-12

假设数字2并且n3

输出应该是:

[2, 0, 0][0, 2, 0][0, 0, 2][1, 1, 0][1, 0, 1][1, 0, 1][0, 1, 1]

如果n2,则输出应为:

[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();
    }
}

以下是我得到的输出。

当数字 = 4 且 n = 2 时:

4 0
3 1
2 2
1 3
0 4

当数字 = 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 0and2 1 12 0 2

我想知道我需要对该方法进行哪些修改,以便可以将排列存储在数据结构中List<List<Integer>>

4

2 回答 2

1

在不盲目地给你作业答案的情况下,我建议使用递归方法来做到这一点。基本上,您需要每个加起来的整数的每个组合,因此您可以假设 5,3 将是:

? + 5
? + 4
? + 3
? + 2
? + 1
? + 0

在哪里 ?现在等于原始总数 (5) 减去右侧。递归 ? 弄清楚所有这些组合。

于 2013-09-20T20:16:06.813 回答
-4
if (n == 2) {
    System.out.println("[2, 0][0, 2][1, 1]");
  }
else if (n==3) {
    System.out.println("[2, 0, 0][0, 2, 0][0, 0, 2][1, 1, 0][1, 0, 1][1, 0, 1][0, 1, 1]");
  }

但我认为这不能算作你作业的解决方案!

于 2013-09-06T10:55:58.703 回答