[Leetcode][第77题][JAVA][组合][回溯]
【问题描述】[中等]
【解答思路】
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][组合][回溯]相关推荐
- [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
[问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...
- [Leetcode][第78题][JAVA][子集][位运算][回溯]
[问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...
- [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]
[问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...
- [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]
[问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...
- [Leetcode][第216题][JAVA][数组之和3][回溯]
[问题描述][中等] [解答思路] 回溯 剪树枝 当和超过n 或 个数超过k 1. 正向求和 优化前 class Solution {public List<List<Integer> ...
- [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]
[问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...
- [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
[问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...
- [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]
[问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...
- [Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]
[问题描述][简单] [解答思路] 1. 内置位计数功能 时间复杂度:O(1) 空间复杂度:O(1) class Solution {public int hammingDistance(int x, ...
最新文章
- 您的主机不满足在启用hyper-v或device_是时候换掉你的旧书桌了!乐歌E5M电动升降桌,坐立换姿不疲劳...
- 加载八叉树索引文件_这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!
- DevExpress的分页Tab控件XtraTabControl控件的使用
- 百度网盘的这个收作业的功能不好用
- boost::describe模块宏BOOST_DESCRIBE_PP_POINTER的测试程序
- php代码以什么开始以什么结束,【后端开发】php语句以什么符号结束
- CS231n Convolutional Neural Networks for Visual Recognition------Scipy and MatplotlibTutorial
- ansible常用命令
- C++ 连接Mongo数据库实现增删改差
- CP/IP四层模型与OSI参考模型
- 印象笔记再WIN10同步失败解决方法
- ORACLE11g R2数据库安装(一)
- openrasp-iast 灰盒扫描工具
- mk编译报错-提示找不到符号
- 西游记中孙悟空被唐僧赶走的三回
- 奇点云数据中台技术汇(一) | DataSimba——企业级一站式大数据智能服务平台
- PyTorch搭建LSTM实现多变量多步长时间序列预测(三):多模型单步预测
- 《神的孩子全跳舞》感
- 表单验证设计的用户体验基本原则
- MFRC53101TOFE小知识