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], ]
NP问题,可以用dfs来做,item里的元素到了k个就可以加到结果数组里并且返回~
class Solution:
# @return a list of lists of integers
def combine(self, n, k):
if n <= 0 or n < k: return []
self.res = []
self.helper(n, k, 1, [])
return self.res
def helper(self, n, k, start, item):
if k == len(item):
self.res.append(item[:])
return
for i in range(start, n+1):
self.helper(n, k, i+1, item + [i])
还有非递归解法,可以参考http://chaoren.is-programmer.com/posts/42627.html