最后返回的List<List> 中每个list为空(在clean之前)

来源:7-7 递归控制_例题列出所有组合

AllenAlan

2018-10-18

/**

  • 递归

  • @Author Allen

  • @Description

  • @Date 2018/10/18 10:42
    **/
    public class RecursionTest {

    private static final Logger logger = LoggerFactory.getLogger(RecursionTest.class);

    /**

    • @Description: 罗列一个集合 n个元素的组合

    • @param group 组合结果, 原始集合, 组合长度
      */
      public void groupCreater(List allGroup, List group, List list, Integer len) {

      if (len <= 0) {
      logger.info(group.toString());
      allGroup.add(group);
      logger.info(allGroup.toString());
      return;
      }

      // 考虑list为空的情况
      if (list.isEmpty()) {
      return;
      }

      // 假设选取第一个元素
      group.add(list.get(0));
      groupCreater(allGroup, group, list.subList(1, list.size()), len - 1);

      // 假设没有选取第一个元素
      group.remove(group.size() - 1);
      groupCreater(allGroup, group, list.subList(1, list.size()), len);

    }

    public static void main(String[] args) {
    RecursionTest test = new RecursionTest();
    List allGroups = new ArrayList();

// logger.info("-----------------");
// test.groupCreater(allGroups,new ArrayList(), new ArrayList(), 0);
// logger.info(JSON.toJSONString(allGroups));
// allGroups.clear();
//
logger.info("-----------------");
test.groupCreater(allGroups, new ArrayList(), Arrays.asList(1, 2, 3, 4), 2);
logger.info(allGroups.toString());

// logger.info("-----------------");
// test.groupCreater(allGroups, new ArrayList(), Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 5);
// logger.info(JSON.toJSONString(allGroups));
// allGroups.clear();

}

}

写回答

1回答

ccmouse

2018-10-25

这是很常见的错误结果,也很容易通过单步调试的方法检查出来。我们可以试试一步一步跟踪来看问题。

0
1
AllenAlan
非常感谢!
2018-10-29
共1条回复

Google面试官亲授-Java面试新手尊享课

为面试新手量身定制的Java面试尊享课,解锁“鲤鱼跃龙门”的妙招

2853 学习 · 180 问题

查看课程