【leetcode】77.组合

文章目录

    • 题目
    • 题解
      • [1. 回溯](#1. 回溯)
      • [2. 剪枝优化](#2. 剪枝优化)

题目

77.组合

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

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

示例 1:

输入:n = 4, k = 2

输出:

\[2,4\], \[3,4\], \[2,3\], \[1,2\], \[1,3\], \[1,4\],

示例 2:

输入:n = 1, k = 1

输出:[[1]]

题解

1. 回溯

python 复制代码
class Solution(object):
    def combine(self, n, k):
        """
        :type n: int
        :type k: int
        :rtype: List[List[int]]
        """
        result = []
        path = []
        start = 1
        def backtracking(n, k, path, start, result):
            if len(path) == k:
                result.append(path[:])
                return 
            
            for i in range(start, n + 1):
                path.append(i)
                backtracking(n, k, path, i + 1, result)
                path.pop()


        if n == 1:
            return [[1]]
        backtracking(n, k, path, start, result)
        return result
        

2. 剪枝优化

python 复制代码
n + 1 - (k - len(path)) + 1
python 复制代码
class Solution(object):
    def combine(self, n, k):
        """
        :type n: int
        :type k: int
        :rtype: List[List[int]]
        """
        result = []
        path = []
        start = 1
        def backtracking(n, k, path, start, result):
            if len(path) == k:
                result.append(path[:])
                return 
            
            for i in range(start, n + 1 - (k - len(path)) + 1):
                path.append(i)
                backtracking(n, k, path, i + 1, result)
                path.pop()


        if n == 1:
            return [[1]]
        backtracking(n, k, path, start, result)
        return result
        
相关推荐
在黎明的反思1 小时前
进程通信之消息队列(IPC)
算法
老鱼说AI1 小时前
算法基础教学第一步:数据结构
数据结构·python·算法
Jing_Rainbow2 小时前
【LeetCode Hot100 刷题日记(19/100)】54. 螺旋矩阵 —— 数组、矩阵、模拟、双指针、层序遍历🌀
算法·面试·程序员
美团测试工程师2 小时前
最常见的软件测试面试题及答案
软件测试·面试·职场和发展
地平线开发者3 小时前
征程 6 | linear 高精度输出配置方式
算法·自动驾驶
小尧嵌入式3 小时前
C++基础语法总结
开发语言·c++·stm32·单片机·嵌入式硬件·算法
white-persist3 小时前
【攻防世界】reverse | IgniteMe 详细题解 WP
c语言·汇编·数据结构·c++·python·算法·网络安全
稚辉君.MCA_P8_Java3 小时前
Gemini永久会员 归并排序(Merge Sort) 基于分治思想(Divide and Conquer)的高效排序算法
java·linux·算法·spring·排序算法
地平线开发者3 小时前
征程 6 | QAT 新版 qconfig 量化模板使用教程
算法·自动驾驶
多恩Stone3 小时前
【ModelScope-1】数据集稀疏检出(Sparse Checkout)来下载指定目录
人工智能·python·算法·aigc