求在1到n個數中挑選k個數的所有的組合類型。
注意點:
每個數字只能夠用一遍 組合的排列沒有順序要求例子:
輸入: n = 4, k = 2
輸出: [[1, 4], [2, 4], [3, 4], [1, 3], [2, 3], [1, 2]]
采用遞歸的方式,在n個數中選k個,如果n大於k,那麼可以分類討論,如果選了n,那麼就是在1到(n-1)中選(k-1)個,否則就是在1到(n-1)中選k個。遞歸終止的條件是k為1,這時候1到n都符合要求。
class Solution(object):
def combine(self, n, k):
"""
:type n: int
:type k: int
:rtype: List[List[int]]
"""
if k == 1:
return [[i + 1] for i in range(n)]
result = []
if n > k:
result = [r + [n] for r in self.combine(n - 1, k - 1)] + self.combine(n - 1, k)
else:
result = [r + [n] for r in self.combine(n - 1, k - 1)]
return result
if __name__ == "__main__":
assert Solution().combine(4, 2) == [[1, 4], [2, 4], [3, 4], [1, 3], [2, 3], [1, 2]]