【问题标题】:Array of ArrayList with Integers filled with combinationsArrayList 数组,整数填充组合
【发布时间】:2017-11-20 06:30:55
【问题描述】:

假设这样,我得到了一个 Integer Wraps Objects 数组...

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]

【问题讨论】:

  • 为什么会有两次new关键字?
  • 我对这个问题投了反对票,因为它似乎是一个零努力的需求转储。如果您可以 edit 您的问题向我们展示您的尝试 Minimal, Complete, and Verifiable example,或准确地澄清您遇到困难的地方,此反对票可能会被撤回。
  • @JoeC 我有递归问题,如何将ArrayList[] 放入generateTable 方法。如果你能帮助我,对我来说很有价值。
  • @BrijRajKishore List&lt;Integer&gt;[] arr = new ArrayList[p.length]; 用于声明 ArrayList 数组。初始化 ArrayList arr[i] = new ArrayList();

标签: java arrays recursion arraylist


【解决方案1】:

而不是直接将数组转换成List。当您这样做时,0 也将被拾取并放入您的列表中。遍历数组的每个索引,只找到非零元素并将它们放入列表中。这有帮助吗?

【讨论】:

  • 嗨,对不起,你能帮我写代码吗...你有这个方法的名字吗?
【解决方案2】:

检查这个解决方案:

  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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多