leetcode第216题组合总和Ⅲ

原题出于leetcode第216题https://leetcode.cn/problems/combination-sum-iii/description/题目为:

找出所有相加之和为 nk个数的组合,且满足下列条件:

  • 只使用数字1到9

  • 每个数字 最多使用一次

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回

1.树型结构

2.代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(int k,int n,int sum,int startindex){
        if(path.size()==k){
            if(n==sum){
                result.push_back(path);
            }
            return ;
        }
        for(int i=startindex;i<=9;i++)
        {
            sum+=i;
            path.push_back(i);
            backtracking(k,n,sum,i+1);
            sum-=i;
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        path.clear();
        result.clear();
        backtracking(k,n,0,1);
        return result;
    }
};

3.剪枝操作

此处有两处可做剪枝,先看如下树形结构:

  1. 如果当前n的值已经比sum大了,后续就不需要遍历了

因此可加如下代码来判断:

复制代码
if(n>sum){ return ; }
  1. 这里仍然有组合个数限制为k,与组合问题类似,可调节i的范围

具体代码如下:

cpp 复制代码
class Solution {
public:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(int k,int n,int sum,int startindex){
        if(sum>n){
            return ;
        }
        if(path.size()==k){
            if(n==sum){
                result.push_back(path);
            }
            return ;
        }
        for(int i=startindex;i<=9-(k-path.size())+1;i++)
        {
            sum+=i;
            path.push_back(i);
            backtracking(k,n,sum,i+1);
            sum-=i;
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        path.clear();
        result.clear();
        backtracking(k,n,0,1);
        return result;
    }
};
相关推荐
JieE21213 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2021 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架