LeetCode.77. 组合
LeetCode.77. 组合
难度:中等
这道题属于回溯的经典题目:
回溯模板:
void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}
Java:
class Solution {List<List<Integer>> list = new ArrayList<List<Integer>>();// 路径,保存每次结果ArrayList<Integer> path = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return list;}public void backtracking(int n, int k, int startIndex) {if (path.size() == k) {// 想知道为什么这里要这样才能成功添加进入listlist.add(new ArrayList<>(path));// list.add(path);return;}// 已剪枝for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) {path.add(i); backtracking(n, k, i + 1);path.remove(path.size() - 1);}}
}
Python:
class Solution: def combine(self, n: int, k: int) -> List[List[int]]:res = []path = []def backtracking(n, k, startIndex):if len(path) == k:res.append(path[:])return# range 左闭右开for i in range(startIndex, n - (k - len(path)) + 2):path.append(i)backtracking(n, k, i + 1)path.pop()backtracking(n, k, 1)return res
记得写构造函数:
class Solution: def __init__(self):self.res = []self.path = []def combine(self, n: int, k: int) -> List[List[int]]:self.backtracking(n, k, 1)return self.resdef backtracking(self, n, k, startIndex):if len(self.path) == k:self.res.append(self.path[:])return# range 左闭右开for i in range(startIndex, n - (k - len(self.path)) + 2):self.path.append(i)self.backtracking(n, k, i + 1)self.path.pop()
复杂度分析:
- 时间复杂度:O(n)??
- 空间复杂度:O(n)
LeetCode.77. 组合相关推荐
- leetcode:77.组合
77. 组合 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/combinations 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 ...
- LeetCode 77. 组合 | Python
77. 组合 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/combinations 题目 给定两个整数 n 和 k,返回 1 - n 中所有可能 ...
- Java实现 LeetCode 77 组合
77. 组合 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], ...
- LeetCode 77. 组合(回溯)
1. 题目 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例:输入: n = 4, k = 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[ ...
- LeetCode 77 组合 -- 回溯法
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combinations 题意: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 ...
- Leetcode 77.组合
组合 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1 ...
- LeetCode 77.组合求和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重复被选 ...
- leetcode 77. 组合 思考分析
目录 1.题目 2.回溯法思路 3.参考其他思路,更深入了解这个问题 4.剪枝优化 可能需要回顾到的知识文章: 1.常用算法总结(穷举法.贪心算法.递归与分治算法.回溯算法.数值概率算法) 2.回溯法 ...
- LeetCode 77 组合
题目描述 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 题解 深度优先搜索 代码 class Solution {public:void dfs(vector< ...
最新文章
- 从源码分析DEARGUI之异步调用函数对比
- 模板 - 图论 - 树链剖分
- linux Hadoop HDFS NameNode进程重启脚本(linux进程通用)
- LI标签在Ul中居中显示
- ubuntu apt报错无法获得锁/var/lib/dpkg/lock 和无法锁定管理目录
- 学游戏3d建模好找工作吗?待遇如何?
- 亚马逊机器学习工程师面试怎么过?
- Win Form中限制TextBox只能输入数字
- random_state的值如何选_算法萌新如何学好动态规划(3)
- Xcode 12 to build a single binary with both 32-bit and 64-bit support
- python游戏编程入门百度云-《Python游戏编程快速上手》PDF下载|百度云盘
- dos命令大全DOS命令图解教程
- 优启通制作系统u盘_如何用优启通制作U盘启动盘
- 《般若波罗蜜多心经》全文及解释
- 边云协同的优点_关于边缘计算和边云协同,看这一篇就够了
- 方法简单手把手教你,空闲时间在家剪辑视频,一天收入300多
- 本地时间和GMT(UTC)时间的转换
- python利用opencv进行车牌号识别定位
- 北京邮电大学计算机网络课件,北京邮电大学计算机网络课件第一章:物理层.ppt...
- Tampermonkey[油猴插件]开发者的神级工具!