找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
示例 1:
输入: k = 3, n = 7
输出: [[1,2,4]]
题解(一):这道题的枚举总数最多不过是2^9个,我们可以直接遍历每一种组合情况,找出符合要求的组合。进行枚举时,我们可以使用二进制枚举法,利用二进制数字来帮助我们遍历所有的组合。对这道题而言,就是九位二进制数字,如果某位上的数字为1,则选择该位的位数数字,若为0则不选择该位的位数数字(例:000001101,则代表的数字组合[1,3,4])
class Solution {
private final List<Integer>tempList=new Vector<>();
private final List<List<Integer>>res=new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
//0~1 <<9中的每一个数字的二进制形式都代表了一种组合情况
for(int mask=0;mask<(1<<9);mask++){