我有一个整数数组:n[]。
n[]
另外,我有一个Nr[]包含n.length整数的数组()。我需要n[]通过以下方式生成的所有组合:
Nr[]
n.length
/* let n.length == 3 and Nr[0] = 2, Nr[1] = 3, Nr[2] = 3 */ n = {0, 0, 0}; n = {1, 0, 0}; n = {2, 0, 0}; n = {0, 1, 0}; n = {0, 2, 0}; n = {0, 3, 0}; n = {0, 0, 1}; ... n = {1, 1, 0}; n = {1, 2, 0}; n = {1, 3, 0}; n = {2, 1, 0}; n = {2, 2, 0}; n = {2, 3, 0}; n = {1, 1, 1}; ... n = {0, 1, 1}; // many others
目标是找到n哪里n[i]可以存在的所有组合0 to Nr[i]。
n
n[i]
0 to Nr[i]
我没有成功…如何用Java解决?还是不是用Java …
您可能要使用递归,尝试每个索引的所有可能,然后 递归调用子 数组“不带”最后一个元素。
public static void printPermutations(int[] n, int[] Nr, int idx) { if (idx == n.length) { //stop condition for the recursion [base clause] System.out.println(Arrays.toString(n)); return; } for (int i = 0; i <= Nr[idx]; i++) { n[idx] = i; printPermutations(n, Nr, idx+1); //recursive invokation, for next elements } }
调用:
public static void main(String[] args) { /* let n.length == 3 and Nr[0] = 2, Nr[1] = 3, Nr[2] = 3 */ int[] n = new int[3]; int Nr[] = {2,3,3 }; printPermutations(n, Nr, 0); }
将为您提供:
[0, 0, 0] [0, 0, 1] [0, 0, 2] [0, 0, 3] [0, 1, 0] [0, 1, 1] [0, 1, 2] [0, 1, 3] [0, 2, 0] [0, 2, 1] [0, 2, 2] [0, 2, 3] [0, 3, 0] [0, 3, 1] [0, 3, 2] [0, 3, 3] [1, 0, 0] [1, 0, 1] [1, 0, 2] [1, 0, 3] [1, 1, 0] [1, 1, 1] [1, 1, 2] [1, 1, 3] [1, 2, 0] [1, 2, 1] [1, 2, 2] [1, 2, 3] [1, 3, 0] [1, 3, 1] [1, 3, 2] [1, 3, 3] [2, 0, 0] [2, 0, 1] [2, 0, 2] [2, 0, 3] [2, 1, 0] [2, 1, 1] [2, 1, 2] [2, 1, 3] [2, 2, 0] [2, 2, 1] [2, 2, 2] [2, 2, 3] [2, 3, 0] [2, 3, 1] [2, 3, 2] [2, 3, 3]
但是请注意-使用此方法确实会按照您的描述打印所有元素,但打印顺序与示例不同。