问题描述

给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:

输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

解题思路

本题与leetcode46全排列问题相似,需要用到回溯法,但问题是这里面要求不能有重复的组合,因此我们想到,在原来的基础上增加一个参数x,要求每次选中某个元素之后,下次只能在这个元素后面的部分进行选择,这样就避免了重复的组合。具体代码如下。

代码实现

public List<List<Integer>> lists;        //保存所有结果的集合public int N;            //指示题中所给的n,表示1...n的n个数public int m;         //指示题中所给的k,表示需要在n个数中选取m个数public int []visited;   //标记数组,标记某个数是否已选中public int nums[];      //存放临时结果的数组//k表示当前选了几个数,取值范围为0-m,即做多只能选取m(题中给的k)个数//x表示从第几个数开始选,这里是下标,为了避免重复,比如当选中了第3个数的时候,下一次只能从第4个数开始选。public void dfs(int k,int x){//当选中了m个数的时候,我们就把其添加到集合中。然后退出递归if(k>=m){List<Integer> list=new ArrayList<>();for(int i=0;i<m;i++){list.add(nums[i]);}lists.add(list);return;}else{//从x开始,一直尝试到N,尝试其中的每一种可能//为什么要从x开始,x是上次选取的某个数的下标加1,即要选就选上一次选中的元素的后面的部分,避免重复for(int i=x;i<=N;i++){if(visited[i]==0){visited[i]=1;nums[k]=i;         //注意,这里下标是k,表示前面已经选中了k个数,这是选择的第k+1个数dfs(k+1,i+1);       //开始下一次的深度优先搜索,下一步要从这个元素后面的部分选择visited[i]=0;}}}}public List<List<Integer>> combine(int n, int k) {lists=new ArrayList<>();N=n;m=k;visited=new int[n+1];nums=new int[n+1];dfs(0,1);return lists;}

leetcode题解77-组合相关推荐

  1. leetcode系列--77.组合

    leetcode系列–第77题.组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 输入:n = 4, k = 2 输出: [[2, ...

  2. 【LeetCode】77 组合 (C++)

    原题地址:https://leetcode-cn.com/problems/combinations/submissions/ 题目描述: 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 ...

  3. Leetcode 76最小覆盖子串77组合78子集

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...

  4. Leetcode(77)——组合

    Leetcode(77)--组合 题目 给定两个整数 n 和 k,返回范围 [ 1 , n ] [1, n] [1,n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输 ...

  5. 每日一道leetcode(python)77. 组合

    每日一道leetcode(python)77. 组合 2021-08-25 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合.你可以按 任何顺序 返回答案.示例 1:输入 ...

  6. leetcode:77.组合

    77. 组合 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/combinations 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 ...

  7. 【算法leetcode每日一练】剑指 Offer II 080. 含有 k 个元素的组合 | 77. 组合

    文章目录 剑指 Offer II 080. 含有 k 个元素的组合 | 77. 组合: 样例 1: 样例 2: 提示: 分析 题解 java c c++ python go rust javascri ...

  8. LeetCode.77. 组合

    LeetCode.77. 组合 难度:中等 这道题属于回溯的经典题目: 回溯模板: void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集 ...

  9. LeetCode 77. 组合 | Python

    77. 组合 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/combinations 题目 给定两个整数 n 和 k,返回 1 - n 中所有可能 ...

  10. Java实现 LeetCode 77 组合

    77. 组合 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], ...

最新文章

  1. 北京内推 | 微软亚洲研究院DKI组王露研究员招聘强化学习方向研究实习生
  2. 稀疏多项式的运算用链表_用最简单的大白话聊一聊面试必问的HashMap原理和部分源码解析...
  3. 怎么点亮段码屏_iPad屏幕坏点亮点怎么看 自查iPad屏幕坏点亮点方法【详解】
  4. www.cnblog.org无法访问了
  5. powercfg -h off_万代 S.H.Figuarts「假面骑士01 金属腾蝗形态」
  6. 在DataGridView中显示合计,并且合计始终在最后一行
  7. html radio 更换图片,html修改radio、checkbox样式
  8. PHP对自己I/O流访问的封装(转)
  9. 解决JSP文件乱码问题
  10. 解决uni-app小程序获取路由及路由参数
  11. 使用 External Secrets Operator 安全管理 Kubernetes Secrets
  12. wamp+php+下载,WAMP(Windows+Apache+Mysql+PHP) 下载配置一条龙
  13. Navicat Premium和Navicat for MySQL的区别
  14. 实验:非骨干区域通过虚链路穿越非骨干区域连接骨干区域实现互联互通
  15. 导致谷歌账号停用的原因
  16. SuperMap iServer常见问题解答集锦(十五)
  17. 【诺贝尔物理奖量子纠缠】启发:命由我作,福由我求
  18. 读书笔记——事务总结
  19. 终于成为了别人眼中的人生赢家
  20. 《JAVA筑基100例》导读

热门文章

  1. 拳王虚拟项目公社:知识付费之出售虚拟教程资源赚钱,小白轻松赚钱的方式
  2. 测试人必备实用技能:写出一份好的Bug报告
  3. Spring容器创建流程(1)容器创建准备
  4. 查询前10条_98条铁路!2021年底前计划开工建设铁路进度一览(10月8日更新)
  5. ios 筛选_LOL手游开始筛选玩家对安卓和IOS有不同要求,不达标可以放弃了
  6. 我的docker随笔34:gitlab服务部署
  7. ubuntu10.04添加账户示例
  8. php 将数据库导出为csv,php – 将数据库转换为CSV并将文件保存到服务器上的文件夹 - 程序园...
  9. 【Clickhouse】Connection is currently waiting for an insert operation, check your previous InsertState
  10. 【Elasticsearch】 es 排查问题 explain 使用 内容解释