假设这个,我获得了一个Integer Wraps对象数组......
Integer[] p = new Integer[]{7, 5, 3, 2}; //Variable Length
现在,我想创建一个ArrayList数组,其中包含下一个相应的值。
2
3
3, 2
5
5, 2
5, 3
5, 3, 2
7
7, 2
7, 3
7, 3, 2
7, 5
7, 5, 2
7, 5, 3, 2
7, 5, 3, 2
什么代码可以帮助我创建一个前面显示过值的数组?
在这段代码中,我尝试生成:
public static void generateTable(int index, int[] current, int[] values) {
if(index == values.length) {
for(int i = 0; i < values.length; i++) {
System.out.print((current[i]) + " ");
}
System.out.println();
} else {
current[index] = 0;
generateTable(index + 1, current, values);
current[index] = values[index];
generateTable(index + 1, current, values);
}
}
此代码仅显示我想要仅提取之前组合的组合(零值除外)。
0 0 0 0
0 0 0 2
0 0 3 0
0 0 3 2
0 5 0 0
0 5 0 2
0 5 3 0
0 5 3 2
7 0 0 0
7 0 0 2
7 0 3 0
7 0 3 2
7 5 0 0
7 5 0 2
7 5 3 0
7 5 3 2
我用这段代码测试:
java.util.List<Integer>[] arr = new ArrayList[p.length];
for( int i = 0; i < p.length; i++) {
arr[i] = new ArrayList();
for (int j = 0; j <= i; j++) {
arr[i].add(p[j]);
}
System.out.println(arr[i]);
}
代码前的输出无法正常工作,不是递归的,也不会显示省略的值,如[5, 3, 2]
或[7, 5, 2]
等等。
[7]
[7, 5]
[7, 5, 3]
[7, 5, 3, 2]
答案 0 :(得分:2)
而不是直接将数组转换为List。当你这样做时,它也会被拿起并放入你的列表中。遍历数组的每个索引,只查找非零元素并将它们放入列表中。这可以帮忙吗?
答案 1 :(得分:1)
检查此解决方案:
public static ArrayList<ArrayList<Integer>> generateTable(int index,
int[] current, int[] values, ArrayList<ArrayList<Integer>> out) {
int Alternative = 0;
if(index == values.length) {
ArrayList<Integer> row = new ArrayList();
for(int i = 0; i < values.length; i++) {
if (current[i] != Alternative) {
row.add(current[i]);
}
}
if (row.size() > 0) {
out.add(row);
}
} else {
current[index] = Alternative;
generateTable(index + 1, current, values, out);
current[index] = values[index];
generateTable(index + 1, current, values, out);
}
return out;
}
测试:
int[] p = {7, 5, 3, 2};
ArrayList<ArrayList<Integer>> o = generateTable(0, new int[p.length], p,
new ArrayList<ArrayList<Integer>>());
o.stream().forEach(l -> System.out.println(l));
打印
[2]
[3]
[3, 2]
[5]
[5, 2]
[5, 3]
[5, 3, 2]
[7]
[7, 2]
[7, 3]
[7, 3, 2]
[7, 5]
[7, 5, 2]
[7, 5, 3]
[7, 5, 3, 2]