首页 > 其他 > 详细

77. 组合

时间:2020-04-23 20:59:21      阅读:53      评论:0      收藏:0      [点我收藏+]

给定两个整数 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

77. 组合

原文:https://www.cnblogs.com/USTC-ZCC/p/12763459.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!