zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    函数式编程
    _.pick lodash
    Vue mixins extend
    js 导入json配置文件
    FormData
    shell中的调试与计算
    linux命令(6/10):find 命令
    Linux性能测试分析命令_sar+iostat+vmstat+top
    linux命令详解之(at)
    linux命令(6/9):watch命令
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/12763459.html
Copyright © 2011-2022 走看看