Java日记2018-08-02

Combinations-

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,

If n = 4 and k = 2, a solution is:

[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

给出一个n和k,要求求出由n中k个不同的数组成是序列,使用回溯的方法求解,对于每次判断的边界条件为:后面的数要大于前面的数,由于这里1到n肯定是递增的,所以继续进行下一层运算的条件可以为 当前位置后面的数

public static ArrayList<ArrayList<Integer>> combine(int n,int k){
        ArrayList<ArrayList<Integer>> res = new  ArrayList<>();
        ArrayList<Integer> lst = new ArrayList<>();
        dfs(n,k,1,1,res,lst);
        return res;
    }
    public static void dfs(int n,int k,int t,int start,ArrayList<ArrayList<Integer>> res,ArrayList<Integer> lst){
        //t记录当前list的数量,如果t大于需要的数组的大小k时,可以计入结果
        if(t>k){
            //System.out.println(lst.get(0));
            res.add(new ArrayList<>(lst));
        } else {
            for(int i=start;i<=n;i++){
                lst.add(i);
                //下一个目的数组应该是当前的数的后一位,即i+1,并且将当前数组大小同时加1即t+1,用于判断是否该记录结果了
                dfs(n,k,t+1,i+1,res,lst);
                lst.remove(lst.size()-1);
            }
            
        }
        
    }
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,872评论 0 10
  • 最近有两件热点事件刷爆网络: 1、6.28上海世外小学砍人案 2、《我不是药神》电影热映引发了巨大的讨论 生老病死...
    诗意恩典阅读 809评论 2 3
  • 用“用户价值公式”衡量创新 百度贴吧百度知道的产品经理俞军认为,产品经理是以创造用户价值为工具,打破旧的利益平衡,...
    明新理财小明阅读 421评论 0 0
  • 前段时间,一直想去位于新疆的试验地看看,想亲自去调查自己的材料。终于有一天,在被老师告知我可以去新疆了的时候,如愿...
    青小桥阅读 193评论 0 0
  • 许多人努力终生,不断从一处航向另一处,到头来只是让自己陷入两难的局面,既然无法使自己本身的价值得到圆满的展现,也无...
    王淇生阅读 816评论 0 0

友情链接更多精彩内容