【问题描述】[中等]

【解答思路】

1. 回溯

class Solution {List<List<Integer>> lists = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {List<Integer> list = new ArrayList<>();backTrace(list, n, k, 0);return lists;}private void backTrace(List<Integer>list, int n, int k, int depth){if(depth>k){return ;}if(depth == k){lists.add(new ArrayList<>(list));return;}for(int i = 1;i<=n ; i++){list.add(i);backTrace(list, n, k, depth+1);list.remove(list.size()-1);}}
}
2. 回溯优化

分析搜索起点的上界进行剪枝


class Solution {List<List<Integer>> lists = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {List<Integer> list = new ArrayList<>();backTrace(list, n, k, 0);return lists;}private void backTrace(List<Integer>list, int n, int k, int depth){if(depth>k){return ;}if(depth == k){lists.add(new ArrayList<>(list));return;}
// 只有这里 i <= n - (k - path.size()) + 1 与参考代码 1 不同for(int i = 1;i <= n - (k - path.size()) + 1  ; i++){list.add(i);backTrace(list, n, k, depth+1);list.remove(list.size()-1);}}
}

【总结】

1. 回溯法解决组合问题。和排列问题不同的是,在组合问题中元素的顺序不考虑,只需要从当前位置向后寻找。排列问题每次都需要从头寻找,需要用visited数组记录访问过的元素。
2.相关题目

[Leedcode][JAVA][第46题][全排列][回溯算法]
[Leetcode][第81题][JAVA][N皇后问题][回溯算法]
[Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]

转载:https://leetcode-cn.com/problems/combinations/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-ma-/

[Leetcode][第77题][JAVA][组合][回溯]相关推荐

  1. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  2. [Leetcode][第78题][JAVA][子集][位运算][回溯]

    [问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...

  3. [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

    [问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...

  4. [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

    [问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...

  5. [Leetcode][第216题][JAVA][数组之和3][回溯]

    [问题描述][中等] [解答思路] 回溯 剪树枝 当和超过n 或 个数超过k 1. 正向求和 优化前 class Solution {public List<List<Integer> ...

  6. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

    [问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...

  7. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...

  8. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...

  9. [Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]

    [问题描述][简单] [解答思路] 1. 内置位计数功能 时间复杂度:O(1) 空间复杂度:O(1) class Solution {public int hammingDistance(int x, ...

最新文章

  1. 您的主机不满足在启用hyper-v或device_是时候换掉你的旧书桌了!乐歌E5M电动升降桌,坐立换姿不疲劳...
  2. 加载八叉树索引文件_这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!
  3. DevExpress的分页Tab控件XtraTabControl控件的使用
  4. 百度网盘的这个收作业的功能不好用
  5. boost::describe模块宏BOOST_DESCRIBE_PP_POINTER的测试程序
  6. php代码以什么开始以什么结束,【后端开发】php语句以什么符号结束
  7. CS231n Convolutional Neural Networks for Visual Recognition------Scipy and MatplotlibTutorial
  8. ansible常用命令
  9. C++ 连接Mongo数据库实现增删改差
  10. CP/IP四层模型与OSI参考模型
  11. 印象笔记再WIN10同步失败解决方法
  12. ORACLE11g R2数据库安装(一)
  13. openrasp-iast 灰盒扫描工具
  14. mk编译报错-提示找不到符号
  15. 西游记中孙悟空被唐僧赶走的三回
  16. 奇点云数据中台技术汇(一) | DataSimba——企业级一站式大数据智能服务平台
  17. PyTorch搭建LSTM实现多变量多步长时间序列预测(三):多模型单步预测
  18. 《神的孩子全跳舞》感
  19. 表单验证设计的用户体验基本原则
  20. MFRC53101TOFE小知识

热门文章

  1. solr 配置中文分词器
  2. 刚装了fedora 17,装机必备,解决视频格式和中文输入法。
  3. [开发技巧3]不显示报表直接打印
  4. java什么是同步_什么是同步?什么是互斥?
  5. fragment dispatchTouchEvent
  6. 微信 网页开发 获取地理位置 高德地图显示
  7. 正则高级用法-分组group+替换
  8. intellij idea 如何将普通项目转换为maven项目
  9. 三星s7共享网络给linux,三星Galaxy S7WiFi状态下可以共享wifi热点吗【详解】
  10. oracle linux6 u盘安装,U盘安装RHEL6