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);
            }
        }
    }
    
  • 相关阅读:
    php 学习笔记 数组2
    php 学习笔记 数组1
    jQuery prop 全选和全不全
    jquery获取多个checkbox的值异步提交给php
    php 计算多维数组中所有值的总和
    系统状态码原型
    hadoop win10开发环境
    kafka spring整合版本匹配
    mac 安装brew
    hadoop2.8.5 idea2019.1.3插件安装
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13784995.html
Copyright © 2011-2022 走看看