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;
    }
};
相关推荐
yi01134 分钟前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
灯澜忆梦3 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下3 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J4 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛4 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有4 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111114 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS5 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b5 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人5 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全