zoukankan      html  css  js  c++  java
  • 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

    我的前方是万里征途,星辰大海!!
  • 相关阅读:
    6-5-1
    static的作用
    第五小题:北京某高校。。。。
    机票预订系统问题定义及可行性分析
    银行储蓄系统问题定义及可行性分析
    软件工程和计算机科学的区别
    中文编码--中国程序员之”银弹“?
    开博第一日
    【转载】大牛很通俗地介绍《信号与系统》
    matlab绘图简单笔记
  • 原文地址:https://www.cnblogs.com/taoyuxin/p/13418795.html
Copyright © 2011-2022 走看看