代码随想录第二十二天刷题

class Solution:
    def combine(self, n: int, k: int) -> List[List[int]]:
        result = []
        self.backtracking(n, k, 1, [], result)
        return result
    def backtracking(self, n, k, startIndex, path, result):
        if len(path) == k:
            result.append(path[:])
            return
        for i in range(startIndex, n+1):
            path.append(i)
            self.backtracking(n, k, i + 1, path, result)
            path.pop()
# ---------- 回溯模板 ----------
# 1. 终止条件:len(path) == k
# 2. for 循环:从 startIndex 开始
# 3. 做选择 → 递归 → 撤销选择
#
# path.pop() 是回溯的灵魂
# 保证状态可复用

#        self.backtracking(n, k, 1, [], result)
# ---------- 回溯参数理解 ----------
# self.backtracking(...)
# self. 是因为这是类的方法
#
# [] 表示:
# 当前路径 path 的初始状态
#
# result 是:
# 所有合法路径的最终集合
#
# path ≠ result

# ---------- 回溯中的拷贝 ----------
# result.append(path)   ❌
# result.append(path[:]) ✅
#
# 原因:
# path 是可变对象
# 回溯会不断修改它
# 必须保存“当时状态的副本”
#
# path[:] == 列表切片拷贝
# ---------- 回溯剪枝 ----------
# for i in range(startIndex, 9 - (k - len(path)) + 2):
#
# 含义:
# 1. startIndex:去重
# 2. 上界:保证后面还有足够数字可选
#
# Python range 特点:
# range(a, b) 不含 b
# 所以要 +1


# ---------- 回溯剪枝:上界计算 ----------
# 1. 还需要数字:
#    need = k - len(path)
#
# 2. 理论上界:
#    max_i = 9 - need + 1
#
# 3. Python range 不含 end:
#    range(start, max_i + 1)
#
# 4. 合并后:
#    range(startIndex, 9 - need + 2)

# ---------- 回溯中的 path ----------
# path = 当前的一条路径(一个组合)
# result = 所有合法路径的集合
#
# len(path):
# 表示当前路径已经选了多少个数
#
# 不要混淆:
# path ≠ result

# ---------- 回溯参数设计 ----------
# 回溯函数 = 状态机
#
# 常见参数:
# 1. 目标值(不变)
# 2. 限制条件(k)
# 3. 当前状态(currentSum)
# 4. 起始位置(startIndex / i+1)
# 5. 当前路径(path)
# 6. 结果集(result)
# ---------- 回溯参数顺序 ----------
# 1. 语法上:参数顺序可以改
# 2. 逻辑上:状态参数必须对应
# 3. 推荐顺序(不易出错):
#    目标值 → 限制 → 当前状态 → startIndex → path → result
# ---------- Python 构造函数 ----------
# ✅ 正确:
# def __init__(self):
#
# ❌ 常见错误:
# def _init_(self):
# def __int__(self):
#
# __init__:
# 1. 创建对象时自动执行
# 2. 用来初始化 self.xxx

全部评论
感谢分享经验 收藏了
点赞 回复 分享
发布于 04-09 04:13 美国

相关推荐

【招聘部门】ICT-云软件研发部【工作地点】上海(优先),杭州,南京,成都,西安,深圳【招聘岗位】AI应用工程师/测试开发工程师【招募对象】毕业于2027.01.01~2027.12.31期间(目前大三/研二/博三/博四,两年半学制的研一同学也🉑),计算机相关专业优先,非相关专业必须要有代码基础【投递流程】1、http://career.huawei.com/→校园招聘→实习生2、搜索岗位:AI应用工程师3、第一意向部门:AI技术应用/AI系统软件->选择工作地点->部门意向选择“ICT BG”“云软件研发部”4、填写完成后,请及时把【简历编号+姓名+学历+学校+专业+电话号码】,私信给我【实习福利】①零成本刷机试/面试经验值②秋招投递同一岗位可沿用实习机试成绩③优秀实习生至少会免一轮秋招专业面④更多了解部门业务,更快熟悉部门技术方向,助力秋招找到自己心仪的岗位!⑤实习机考通过后,不论最终是否来实习,校招可以复用实习的成绩,不用再考。如果实习机考没有通过,不影响秋招,秋招还可以再考一次,相当于2个机考机会。【实习薪酬】本硕实习生税前9000元/月💰博士实习生税前12000元/月💰➕异地实习补贴2000元/月💰➕一次性入职报到往返交通补贴,跨城1000元/人,跨省2000元/人实习机会+大牛导师带教+前沿项目实战+助力秋招,席位先到先得,感兴趣的同学请私信咨询,随时跟踪进展
名企内推
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务