216. 组合总和 III_2022_02_02
216. 组合总和 III
找出所有相加之和为 n 的 _k _个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
- 所有数字都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入: k = 3, n = 7 输出: [[1,2,4]]
示例 2:
输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
Solution
举个简单的例子,比如 :
输入: k = 3, n = 7 输出: [[1,2,4]]
其中 7 的二进制表示的方式为 【0000 0111】
只有一种情况,因此只需要通过二进制为去枚举进行&
运算即可
if 1 << i & mask > 0
即这个条件成立的时候,说明匹配到了当前的二进制位
func combinationSum3(k int, n int) (ans [][]int) { var temp []int check := func(mask int)bool { temp = nil sum := 0 for i := 0; i < 9; i++ { if 1 << i & mask > 0 { temp = append(temp, i + 1) sum += i + 1 } } return len(temp) == k && sum == n } for mask := 0; mask < 1 << 9; mask++ { if check(mask) { ans = append(ans, append([]int(nil), temp...)) } } return }
class Solution { public: vector<int> temp; vector<vector<int>> ans; bool check(int mask, int k, int n) { temp.clear(); for (int i = 0; i < 9; ++i) { if ((1 << i) & mask) { temp.push_back(i + 1); } } return temp.size() == k && accumulate(temp.begin(), temp.end(), 0) == n; } vector<vector<int>> combinationSum3(int k, int n) { for (int mask = 0; mask < (1 << 9); ++mask) { if (check(mask, k, n)) { ans.emplace_back(temp); } } return ans; } };
本文来自博客园,作者:StimuMing,转载请注明原文链接:https://www.cnblogs.com/fole-del/p/15860630.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了