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;
    }
};
相关推荐
Rabitebla几秒前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
顶点多余8 分钟前
9.20 知识点查漏补缺
linux·面试·职场和发展
库玛西9 分钟前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
木井巳11 分钟前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
东方护航数据恢复(深圳)14 分钟前
本地小算力设备数据恢复经典案例实操全解_东方护航数据恢复深圳店
大数据·服务器·算法·ai·gpu算力
Omics Pro23 分钟前
上海AI Lab孙思琦×高张阳:虚拟细胞代码库智能体
数据库·人工智能·算法·机器学习·自然语言处理
Y幽谷客27 分钟前
图像识别入门习题整理
算法
点纭43 分钟前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
β添砖java1 小时前
机器学习2 KNN算法、距离度量、特征预处理、超参数选择、手写数字、鸢尾花
人工智能·算法·机器学习
TAN-90°-1 小时前
Deep Learning for Computer Vision——Generative Models 2
人工智能·深度学习·神经网络·算法·目标检测·机器学习·计算机视觉