leetcode代码记录(组合

简介: leetcode代码记录(组合

1. 题目:

给定两个整数 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]]

2. 我的代码:

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        # 记录结果
        result = []
        # 记录中间值
        path = []


        # 回溯主体
        def backtracking(i_start):
            # 终止条件
            if len(path) == k:
                result.append(path[:])
                return
            
            # 递归 + 回溯
            for i in range(i_start, n + 1):
                path.append(i)
                backtracking(i + 1)
                path.pop()

            # 最坏情况是这条分支没有达到条件的路径
            return
        
        backtracking(1)

        return result

回溯算法有个大体框架,即:

path一维数组,记录各个路径,作为全局变量为了防止方程反复传参,所以在加给result时要记得传给他的是副本,不是本引用,因此是result.append(path[:])

result二维数组,记录各个情况。

backtracking(start_index)函数:

  1. 终止条件
  2. for里:前进 + 递归 + 回溯
目录
相关文章
|
4天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
4天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
4天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
4天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
4天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
10 2
|
4天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
4天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
4天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0