77. 组合

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

示例:

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

1
2
3
4
5
6
7
8
9
10
11
12
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表示供选的数组,

子集:

1
2
3
4
5
6
7
8
9
10
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的子集而已。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 @   USTC丶ZCC  阅读(179)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示