leetcode216--组合总和III

1. 题意

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

  • 只使用数字1到9
  • 每个数字 最多使用一次

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

2. 题解

2.1 回溯
cpp 复制代码
class Solution {
public:
    void search(int begin, vector<vector<int>> &ans,vector<int> &seq, int sum, 
    int n,int k) {
        
        if ( sum == n && seq.size() == k) {
            ans.emplace_back( seq );
            return;
        }
        if ( sum > n || seq.size() > k)
            return;


        for (int i = begin; i < 10; i++) {
            seq.emplace_back(i);
            search( i + 1,ans, seq, sum + i, n, k);
            seq.pop_back();
        }

    }

    vector<vector<int>> combinationSum3(int k, int n) {
        int mx = (9 + (10 - k)) * k / 2;

        vector<vector<int>> ans;
        if ( mx < n)
            return ans;

        vector<int> seq;
        search(1, ans, seq, 0, n, k);
        
        return ans;
    }
};
2.2 二进制枚举

直接枚举每一种可能,判断是否满足即可。

cpp 复制代码
class Solution {
public:
    bool check(int v, int n, int k) {

        int one_cnt  = 0;
        int sum = 0;
        for (int i = 0;i < 9; ++i) {
            if (v & (1 << i))
                one_cnt++, sum += i + 1;
        }

        return one_cnt == k && sum == n;
    }


    vector<vector<int>> combinationSum3(int k, int n) {
        
        vector<vector<int>> ans;
        vector<int> seq;
        for (int i = 1; i < (1 << 9); ++i) {

            if ( check(i, n, k) ) {
                seq.clear();
                for (int j = 0;j < 9; ++j) {
                    if ( i & (1 << j))
                        seq.emplace_back( j + 1);
                }
                ans.emplace_back(seq);
            }
        }

        
        return ans;
    }
};
相关推荐
2601_9677607820 小时前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
不会就选b21 小时前
算法日常・每日刷题--<贪心>7
数据结构·算法·leetcode
moonrailgun21 小时前
用 Node.js 复刻 Codex Astra 的终端星光
前端·javascript·算法
罗西的思考1 天前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(1)--- 总体
人工智能·算法·机器学习
lvwangshu1 天前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
302wanger1 天前
干与湿:AI 拿走脑力之后,人剩下什么
算法
计算机编程-吉哥1 天前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
用户204937554951 天前
端侧语音部署踩坑:模型能跑不等于终端真的能用
后端·算法
shehuiyuelaiyuehao1 天前
算法39,位运算,消失的两个数字
java·数据结构·算法
ZiLing1 天前
2026 ROS 2 Lyrical 踩坑实录(一):编译与依赖——rosdep、现代 CMake 与 CMake 4.x
算法