代码随想录算法训练营第二十四天| 77.组合

代码随想录算法训练营第二十四天| 77.组合

题目

77.组合

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

# 思路一
class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        res = []
        self.backtracking(n, k, 1, [], res)
        return res

    def backtracking(self, n, k, startindex, curpath, res):
        if len(curpath) == k:
            res.append(curpath[:])
            return 
        for i in range(startindex, n+1):
            curpath.append(i)
            self.backtracking(n, k, i+1, curpath, res)
            curpath.pop()
            
# 思路二,剪枝
class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        res = []
        self.backtracking(n, k, 1, [], res)
        return res

    def backtracking(self, n, k, startindex, curpath, res):
        if len(curpath) == k:
            res.append(curpath[:])
            return 
        # n-i+1 >= k-len(curpath)
        # i <= n-(k-len(curpath))+1
        # 因为左闭右开,所以还要再加1
        for i in range(startindex, n-(k-len(curpath))+2):
            curpath.append(i)
            self.backtracking(n, k, i+1, curpath, res)
            curpath.pop()

你可能感兴趣的:(代码随想录,算法,python,leetcode)