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

发布时间:2024年01月17日

代码随想录算法训练营第二十四天| 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()
文章来源:https://blog.csdn.net/qq_46528858/article/details/135621935
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。