77. 组合

给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

示例:

输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        ans = []
        def completePermutation(tmp, idx):
            if len(tmp) == k:
                ans.append(tmp[:])
            for i in range(idx, n + 1):
                tmp.append(i)
                completePermutation(tmp, i + 1)
                tmp.pop()
        completePermutation([], 1)
        return ans 

拓展:

回溯算法函数dfs

第一个参数cur表示临时答案,在供选数组里取第一个元素,对于它,我们有两种选择,选 或者 不选

第二个参数nums表示供选的数组,

子集:

def subsets(self, nums: List[int]) -> List[List[int]]:
        res=[]        
        def dfs(cur,nums):
            if not nums:
                res.append(cur)
                return        
            dfs(cur+[nums[0]],nums[1:])
            dfs(cur,nums[1:])            
        dfs([],nums)
        return res

组合:

组合不过是在所有子集里,筛选出符合要求题目要求的,即只保留长度等于K的子集而已。

def combine(self, n: int, k: int) -> List[List[int]]:
    
        res=[]
        nums=list(range(1,n+1))
        
        def dfs(cur,nums):
            if not nums :
                if len(cur)==k:
                    res.append(cur)
                return 
                                   
            dfs(cur+[nums[0]],nums[1:])
            dfs(cur,nums[1:])
        
        dfs([],nums)
        return res
posted @ 2020-04-23 20:52  USTC丶ZCC  阅读(176)  评论(0编辑  收藏  举报