leetcode 77. Combinations-排列|递归|非递归|Java|Python
来源:互联网 发布:linux 永久关闭 swap 编辑:程序博客网 时间:2024/05/15 12:10
原题链接:77. Combinations
更优解法可参考:优化解法
【思路-Java、Python】递归实现
采用回溯算法。这是一道 NP 难问题,时间复杂度没办法提高,用一个循环递归处理子问题,问题的终止条件是每个组合中的元素个数达到 k 个:
public class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> res = new ArrayList<List<Integer>>(); List<Integer> temp = new ArrayList<Integer>(); dfs(res, temp, n, k, 1); return res; } private void dfs(List<List<Integer>> res, List<Integer> temp, int n, int k, int m) { if(k == 0) { res.add(new ArrayList<Integer>(temp)); return; } for(int i=m; i<=n; i++) { temp.add(i); dfs(res, temp, n, k-1, i+1); temp.remove(temp.size()-1); } }}26 / 26 test cases passed. Runtime: 3 ms Your runtime beats 56.70% of javasubmissions.
class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ res = [] self.rec(res, 0, n, k, []) return res def rec(self, res, i, n, k, temp) : if k == 0 : res.append(temp) return for j in range(i+1, n+1) : self.rec(res, j, n, k-1, temp+[j])26 / 26 test cases passed. Runtime: 88 ms Your runtime beats 32.21% of pythonsubmissions.
【思路2-Python】非递归实现
class Solution(object): def combine(self, NN, K): """ :type n: int :type k: int :rtype: List[List[int]] """ result = [[[]]] for n in range(1,NN+1): newRes=[[[]]] for k in range(1,n): newRes.append(result[k] + [i + [n] for i in result[k-1]]) newRes.append([result[n-1][0] + [n]]) result = newRes return result[K]26 / 26 test cases passed. Runtime: 88 ms Your runtime beats 32.21% of pythonsubmissions.
更优解法可参考:优化解法
1 0
- leetcode 77. Combinations-排列|递归|非递归|Java|Python
- leetcode 77. Combinations 按照index递归搜索+全排列做法
- leetcode 46. Permutations-全排列|回溯|递归|非递归
- 全排列 递归,非递归
- 77.leetcode Combinations(medium)[回溯递归]
- 蛇形排列 非递归
- 非递归全排列
- 全排列非递归
- 非递归全排列
- 全排列非递归
- JAVA递归和非递归输出字符串的全排列
- leetcode 199. Binary Tree Right Side View-树的右视图|递归|非递归|Java|Python
- 全排列(递归与非递归)
- 输出全排列(递归&非递归)
- 字符串排列递归和非递归实现
- 全排列生成 (递归+非递归)
- 全排列(递归与非递归实现)
- 手写全排列(递归 | 非递归)
- 简述Session 、Cookie、cache 区别
- 实习入职第十三天:MediaPlayer的seekTo函数
- 编译器错误消息: CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
- iOS设计模式——委托(delegate)
- mkmapView的应用
- leetcode 77. Combinations-排列|递归|非递归|Java|Python
- 怎么用ChemDraw Prime 15绘制立体化学结构
- iOS 8 AutoLayout与Size Class自悟
- Longest Substring Without Repeating Characters
- (二)第二章:大数据底层技术通用架构概要介绍
- 开源社区
- VS2015永久配置OPENCV3.0
- iOS设计模式——单例模式
- Excel大量导出