当前位置: 首页 > news >正文

leetcode第216题组合总和Ⅲ

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

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

  • 只使用数字1到9

  • 每个数字 最多使用一次

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

1.树型结构

2.代码

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的范围

具体代码如下:

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;
    }
};

http://www.dtcms.com/a/47035.html

相关文章:

  • 在笔记本电脑上用DeepSeek搭建个人知识库
  • 类似ComfyUI和Midjourney这样的文生图图生图应用的API与服务架构该怎么设计
  • linux shell脚本网络篇
  • LabVIEW正弦信号处理:FFT与最小二乘拟合的参数提取
  • 关于JavaScript性能问题的误解
  • Kotlin 运算符重载
  • Python 爬虫 – BeautifulSoup
  • 在Linux系统上使用nmcli命令配置各种网络(有线、无线、vlan、vxlan、路由、网桥等)
  • MySQL中的共享锁和排他锁
  • Qwen2-Audio系列学习笔记
  • 事件循环_经典面试题
  • 【软件测试】论坛系统功能测试报告
  • 【HCIE实验1】模拟 DHCPv6 服务器及 PD 服务器分配 IPv6 地址和前缀的网络环境。
  • [代码规范]接口设计规范
  • 汽车控制应用对芯片的特殊要求
  • 在分布式系统中,解决因锁持有者故障导致锁无法释放的问题
  • Yocto + 树莓派摄像头驱动完整指南
  • spring boot整合flyway实现数据的动态维护
  • 如何在优云智算平台上面使用deepseek进行深度学习
  • 命名实体识别与文本生成算法
  • 迷你世界脚本组队接口:Team
  • Git学习
  • centos7使用rpm包安装mysql5.6和mysql8.0
  • 如何在docker中的mysql容器内执行命令与执行SQL文件
  • Linux:动静态库
  • (贪心 合并区间)leetcode 56
  • 接口性能优化?
  • 介绍 torch-mlir 从 pytorch 生态到 mlir 生态
  • 《Python实战进阶》No 10:基于Flask案例的Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻击
  • C# 上位机---INI 文件