zoukankan      html  css  js  c++  java
  • 组合总和Ⅲ

    Leetcode题目描述

    找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

    说明:

    所有数字都是正整数。
    解集不能包含重复的组合。
    示例 1:

    输入: k = 3, n = 7
    输出: [[1,2,4]]
    示例 2:
    
    输入: k = 3, n = 9
    输出: [[1,2,6], [1,3,5], [2,3,4]]
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/combination-sum-iii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    回溯剪枝算法

    • 建议辅助画图,注意边界,尤其是确定target值的时候
    • 注意终止条件,每一次得到结果之后就可以进行终止计算了

    回溯剪枝算法Demo

    import java.util.ArrayList;
    import java.util.List;
    
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public List<List<Integer>> combinationSum3(int k, int n) {
            List<List<Integer>> res = new ArrayList<>();
            backtrack(k, n, 1, new ArrayList<>(), res);
            return res;
        }
    
        /**
         *
         * @param num 还可以使用数字的数量
         * @param target 可以用于计算的结果值
         * @param start 去重的关键,记录下一次开始的位置
         * @param tmp   一次成功的结果
         * @param res   所有结果
         */
        public void backtrack(int num, int target, int start, List<Integer> tmp, List<List<Integer>> res){
            if(target < 0) return;
            if ( num == 0){
                if( target == 0){
                    res.add(new ArrayList<>(tmp));
                    return;
                }
                return;
            }
    
    
            for(int i = start; i <= target; i++){
                tmp.add(i);
                backtrack(num - 1, target - i, i + 1, tmp, res);
                tmp.remove(tmp.size() - 1);
            }
        }
    }
    
  • 相关阅读:
    Centos7上安装docker
    另类SQL拼接方法
    多平台Client TCP通讯组件
    Redis协议详解
    .net下简单快捷的数值高低位切换
    beetle 2.7海量消息广播测试
    FileSync文件同步更新工具
    简单实现TCP下的大文件高效传输
    感知机原理小结
    日志和告警数据挖掘经验谈
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13784995.html
Copyright © 2011-2022 走看看