首页 > 其他分享 >leetcode216-组合总和 III

leetcode216-组合总和 III

时间:2022-09-23 18:23:51浏览次数:67  
标签:return int sum targetSum result path leetcode216 III 总和

216. 组合总和 III

 

有了 77. 组合 的启发后,就成功地自己写了通过的代码

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    int sum=0;
    void combineSum(int k,int n,int startNum)
    {
        if(path.size()==k&&sum==n)
        {
            res.push_back(path);return;
        }
        for(int i=startNum;i<=9&&i<=n-sum;i++)
        {
            path.push_back(i);
            sum+=i;
            combineSum(k,n,i+1);
            path.pop_back();
            sum-=i;
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        combineSum(k,n,1);
        return res;
    }
};

这是代码随想录的剪枝后的代码

class Solution {
private:
    vector<vector<int>> result; // 存放结果集
    vector<int> path; // 符合条件的结果
    void backtracking(int targetSum, int k, int sum, int startIndex) {
        if (sum > targetSum) { // 剪枝操作
            return; // 如果path.size() == k 但sum != targetSum 直接返回
        }
        if (path.size() == k) {
            if (sum == targetSum) result.push_back(path);
            return;
        }
        for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝
            sum += i; // 处理
            path.push_back(i); // 处理
            backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndex
            sum -= i; // 回溯
            path.pop_back(); // 回溯
        }
    }

public:
    vector<vector<int>> combinationSum3(int k, int n) {
        result.clear(); // 可以不加
        path.clear();   // 可以不加
        backtracking(n, k, 0, 1);
        return result;
    }
};

 

标签:return,int,sum,targetSum,result,path,leetcode216,III,总和
From: https://www.cnblogs.com/uacs2024/p/16723832.html

相关文章

  • LeetCode组合总和
    组合总和前言在上篇文章通过组合问题看透回溯法当中我们通过介绍一个组合问题,仔细地分析了组合问题的回溯过程。我们之后会继续介绍一些比较经典的回溯算法题,帮助深入彻......
  • ucocIII野火
    5.1裸机系统5.1.1轮询系统轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。轮询系统是一种非常简单的软件结......
  • dev report 在程序中修改label内的值比如求两个report的总和
    要实现两个报表的和的之和.  比如报表1的和,报表2的和  ,和报表下边label总和,此时用报表的sum无法调用两个数据源的字段. 于是想在后台程序中根据上两个报表......
  • 输出点(x,y)所在的象限(或者坐标轴) 如在第一象限,输出I 如在第二象限,输出II 如在第三象限,输
    #include<stdio.h>main(){intx,y;scanf("%d%d",&x,&y);if(x>0&&y>0){printf("I");}elseif(x<0&&y>0){......
  • LeetCode — 跳跃游戏 III
    LeetCode—跳跃游戏III问题陈述给定一个非负整数数组arr,您最初位于开始数组的索引。当你在索引一世,你可以跳到i+arr[i]或者i—arr[i],检查是否可以......
  • Meeting Rooms III
    MeetingRoomsIIIYouaregivenaninteger$n$.Thereare$n$roomsnumberedfrom$0$to$n-1$.Youaregivena2Dintegerarray meetings where meetings[i......
  • 【JS】112. 路径总和
    112.路径总和代码DFSvarhasPathSum=function(root,targetSum){//找到没有根了,那么就说明这条路行不通if(!root){returnfalse;}//......
  • LeetCode 216 组合总和 III
    classSolution{public:vector<vector<int>>res;vector<int>path;intsum=0;voiddfs(intstart,intk,intn){if(path.siz......
  • LeetCode 40 组合总和 II
    classSolution{public:vector<vector<int>>res;vector<int>path;intsum;voiddfs(intstart,vector<int>&candidates,inttarget){......
  • LeetCode 19 组合总和
    classSolution{public:vector<vector<int>>res;vector<int>path;intsum=0;voiddfs(intstart,vector<int>&candidates,inttarget){......