LeetCode----Combinations
来源:互联网 发布:上海大型网络工程公司 编辑:程序博客网 时间:2024/06/11 06:16
Combinations
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]
组合问题。适合使用回溯法解决,另外python下地itertools中也提供了combinations函数。
回溯法:
class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ ans = [] self.dfs(n, k, 1, [], ans) return ans def dfs(self, n, k, start, lst, ans): if not k: ans.append(lst) return for i in range(start, n + 1): self.dfs(n, k - 1, i + 1, lst + [i], ans)
itertools.combinations:
class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ from itertools import combinations return [list(c) for c in combinations(range(1, n+1), k)]
回溯法2:
class Solution(object): def combine(self, n, k): """ :type n: int :type k: int :rtype: List[List[int]] """ ans = [] stack = [] x = 1 while True: l = len(stack) print stack, x, 2 + l if l == k: ans.append(stack[:]) if l == k or x > n - k + l + 1: if not stack: return ans x = stack.pop() + 1 else: stack.append(x) x += 1
回溯法2来自于LeetCode中的Discuss。
代码解释:Combinations is typical application for backtracking. Two conditions for back track: (1) the stack length is already k (2) the current value is too large for the rest slots to fit in since we are using ascending order to make sure the uniqueness of each combination.
我的翻译:Combinations是典型的适用回溯法的题型。该代码会在满足两种条件下回溯:(1)当栈的长度已经达到k了;(2)当前值太大,无法放入栈中(由于是升序添加元素,所以可以确保每次产生的解不重复)。
0 0
- LeetCode: Combinations
- LeetCode: Combinations
- LeetCode Combinations
- [Leetcode] Combinations
- [LeetCode] Combinations
- Leetcode: Combinations
- LeetCode Combinations
- [Leetcode] Combinations
- [Leetcode] Combinations
- [leetcode] Combinations
- [LeetCode]Combinations
- [leetcode]Combinations
- LeetCode-Combinations
- [leetcode] Combinations
- LeetCode - Combinations
- 【Leetcode】Combinations
- Leetcode: Combinations
- 【leetcode】Combinations
- (1.5.2.12)字符串循环移位 编程之美3.1
- HDU 1010 Tempter of the Bone(DFS)
- IOS推送 原理及其小知识
- Hammer.js
- 第六周项目2-建立链栈算法库
- LeetCode----Combinations
- 第4周项目3 - 单链表应用(2)
- Android Studio Tips -- 自定义Logcat
- R语言运行环境
- 本地映射服务TUNNEL
- 微信公众号unionid问题
- Linux实用命令
- iOS dealloc 不执行或延迟执行的问题
- CentOS6.6 上安装MySQL5.6