回溯:216、组合总和III

回溯:216、组合总和III

思路:本题除了给定数组外,又指定了结果的长度,我们根据前面两道题的套路很容易解决。

class Solution {
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        vector<vector<int>>res;
        if(k==0) return res;
        vector<int>path;
        backtrack(1,k,n,res,path);
        return res;
    }
    //参数依次是:起始元素,路径个数,目标值,结果,路径
    void backtrack(int begin,int k,int n,vector<vector<int>>&res,vector<int>&path){
        if(n==0&&k==0){
            res.push_back(path);
            return;
        }
        //此处i不再是数组下标,直接是供选择的值
        for(int i=begin;i<=9;i++){
            //剪枝,目标值小于0或长度小于0,结束本轮循环
            if(n-i<0||k<0) break;
            //选择元素
            path.push_back(i);
            backtrack(i+1,k-1,n-i,res,path);
            //撤销选择
            path.pop_back();
        }
    }
};

 

上一篇:leetcode 772 基本计算器III(包含+-*/ 以及括号) 核心在于递归


下一篇:百度ueditor - 支持word上传的富文本编辑器