• leetcode——77.组合


    递归+回溯

    完成!

    public List<List<Integer>> combine(int n, int k) {
            if(k>n){
                return new ArrayList<>();
            }
            List<List<Integer>> res = new ArrayList<>();
            List<Integer> list = new ArrayList<>();
            if(k==n){
                for(int i = 1;i<=n;i++){
                    list.add(i);
                }
                res.add(list);
                return res;
            }
            //接下来是k<n的情况
            //当数组元素个数==k的时候,将其添加进res
            //需要一个递归函数
            //得有一个标记是否被访问过的参数
            boolean[] selected = new boolean[n+1];
            backtrack(n,k,res,list,selected);
            return res;
        }
    
        private void backtrack(int n, int k, List<List<Integer>> res, List<Integer> list,boolean[] selected) {
            if(list.size() == k){
                res.add(new ArrayList<>(list));
                return;
            }
            for(int i = 1;i<=n;i++){
                if(!selected[i] && (list.isEmpty() || i>list.get(list.size()-1))){
                    list.add(i);
                    selected[i] = true;
                    backtrack(n, k, res, list, selected);
                    selected[i] = false;
                    list.remove(list.size() - 1);
                }
            }
        }

     优化之后:

    public List<List<Integer>> combine(int n, int k) {
            List<List<Integer>> res = new ArrayList<>();
            List<Integer> list = new ArrayList<>();
            backtrack(n,k,1,0,res,list);
            return res;
        }
        private void backtrack(int n, int k,int start,int cur, List<List<Integer>> res, List<Integer> list) {
            if(cur == k){
                res.add(new ArrayList<>(list));
                return;
            }
            for(int i = start;i<=n;i++){
                list.add(i);
                backtrack(n, k, i+1,cur+1,res, list);
                list.remove(list.size() - 1);
            }
        }

     ——2020.8.2

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    访客登录方案设计与应用
    VS Code下载
    dockerfile COPY命令失效
    mysql排序字段值相等时,分页数据重复
    go使用json包Marshal方法得到异常结果[123 125]
    Mysql知识点概览
    dockercompose安装
    docker安装
    Shell脚本执行报错:Syntax error: "(" unexpected
    二进制数的位运算,角色权限,多种账号来源
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13418795.html
Copyright © 2020-2023  润新知