美文网首页
列出所有组合的算法

列出所有组合的算法

作者: liust15 | 来源:发表于2018-05-16 17:01 被阅读0次

    实现combinations( List<Integer> data, int n) n==2,当n变的更大的时候

    解释:从[1,2,3,4]中取出两个数方法名为combinations( List<Integer> data, int n);

    看到这个题目作为一个小白第一下思考的就是使用循环,但是如果出现n的数目改变的时候,我们只能添加for循环实现。

    这个给出的是使用递归的方法,希望有大佬一起探讨。
    下面是代码

    public class Combinations {
        public void combinations(List<Integer> selected, List<Integer> data, int n) {
            //initial value for recursion
            //how to select elements
            //how to output
            if (n == 0) {
                for (Integer i : selected) {
                    System.out.print(i);
                    System.out.print(" ");
                }
                System.out.println();
                return;
            }
            if (data.isEmpty()) return;
    
            //select element 0
            selected.add(data.get(0));//将第一个值添加上去
            combinations(selected, data.subList(1, data.size()), n - 1);
            //un-select element 0
    
            selected.remove(selected.size() - 1);
            combinations(selected, data.subList(1, data.size()), n);
        }
        public static void main(String[] args) {
            Combinations combinations = new Combinations();
            combinations.combinations(new ArrayList<Integer>(), Arrays.asList(1, 2, 3,4,5,6), 4);
        }
    }
    

    相关文章

      网友评论

          本文标题:列出所有组合的算法

          本文链接:https://www.haomeiwen.com/subject/nrfmdftx.html