ArrayList的数组,其中整数填充了

时间:2017-11-20 06:30:56

标签: java arrays recursion arraylist

假设这个,我获得了一个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]

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]