zoukankan      html  css  js  c++  java
  • Leetcode 216 组合总和III 初级01背包

     

      回溯解法:

        private List<List<Integer>> anList = new LinkedList<List<Integer>>();
    
        public final List<List<Integer>> combinationSum3(int k, int n) {
            combinationSum3DP(k, n, new Stack<Integer>(),1);
            return anList;
        }
    
        /**
         * @Author Niuxy
         * @Date 2020/7/3 12:51 下午
         * @Description k 个和为 n 的子序列,需要找到所有序列,不能简单地定义状态转移方程。
         * 必须遍历整个解空间。
         * 每个元素从小到大随机选取,天然有序,不需要额外的去重工作
         * 背包问题变种,将视角从整体放到局部,每个元素都有两种状态,选择或不选择。
         */
        public final void combinationSum3DP(int k, int n, Stack<Integer> anStack,int flag) {
            if (n <= 0 && k != 0) {
                return;
            }
            if (k == 0) {
                if (n != 0) {
                    return;
                }
                anList.add(new ArrayList<Integer>(anStack));
                return;
            }
            for (int i = flag; i < 10; i++) {
                if (anStack.contains(i)) {
                    continue;
                }
                anStack.push(i);
                combinationSum3DP(k - 1, n - i, anStack,+1);i
                //回溯
                anStack.pop();
            }
        }

  • 相关阅读:
    kali2018 安装****
    IIS PUT
    解析漏洞总结
    深入理解MVC
    Linux常用命令整理
    nginx视频直播/点播服务干货分享
    记因PHP的内存溢出导致的事故之解决
    五环之歌之PHP分页
    phpstorm 2017.1 激活
    拉伸收缩广告
  • 原文地址:https://www.cnblogs.com/niuyourou/p/13229852.html
Copyright © 2011-2022 走看看