【Leetcode】77. Combinations

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

第一种解法:return list(itertools.combinations(range(1,n+1),k))

1 第一种解法,使用python自带的combinations函数,combinations(iterable, r)返回iterable中所有长度为r的子序列

2 如果前面没有import,则需要itertools.combinations()这么使用

3 第二种解法是递归+回溯:每次遍历到一个元素时,分为放入和不放入集合两种情况,若集合长度为k,则加入到结果中

4 和stack结合起来做,stack的长度等于k,所以当stack的长度等于k的时候,就将combination送到res中去。

5 同时,在stack长度等于k的时候,送完res后,需要pop顶上的元素出来,做加1操作,以便把[1, n]中的下一个元素在下一个循环压栈

6 当pop出去的数加1大于n的时候,说明我们已经完成了最大n的遍历,这时需要继续pop小的

7 pop的条件是:a,栈满;b,1到n中剩下个数n-x+1<栈中还需要insert的个数(k-l)

8 res.append(stack[:])是将stack中的所有元素都copy到res中去

9 还要注意结束条件:



你可能感兴趣的:(【Leetcode】77. Combinations)