leetcode216(组合总和III:二进制枚举)

该博客介绍了如何使用二进制枚举法解决LeetCode 216问题,寻找和为n的k个正整数组合。示例给出了当k=3, n=7时,输出组合为[1,2,4]。题解提到枚举总数不超过2^9,并详细解释了如何通过二进制数字来遍历所有可能的组合。" 89353602,2834447,最长公共子序列(LCS)在文本相似度中的应用,"['自然语言处理', '算法', '相似度计算', '动态规划']
摘要由CSDN通过智能技术生成

找出所有相加之和为 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++){
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值