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

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 美国

相关推荐

昨天 08:20
已编辑
重庆邮电大学 前端工程师
超级社牛老登捞了我一把,所以感觉才会面的比较的顺利,这里也是给老登跪了。而且hr还问了我之前的ld我的表现,我之前的ld也是给了很好的评价,这里也是泪目了,字节飞书管理后台/安全部门 里的人都是超级和善的好人,望周知。还有一点感觉就是现在都不问我的破QQ项目了,我这破QQ项目是我和一个啥鸾工作室同学写的,nm去年都在用,现在再用就有点垃圾了。打算写一个一站式生成Galgame的Agent项目,因为看到最近国G出这么多事,md我想搓个好的国G拯救国G,一面(mt)1. 小红书简历提问,Stylus类名原子化转换器2. Openclaw记忆相关的问题(memory,soul,boostrap之类的,简单说说就完了)3. 如果让你进行一个大型仓库的重构,怎么结合AI进行重构4. 知道harness engineering吗(刷到过,没点进去看)5. 用过哪些模型,用的啥Coding Plan6. 上一段也是字节,为什么离职7. 如下是一段AI写的代码,请你找出它有问题的地方,以及需要改进的地方(闭包,性能问题,强调了下fiber,然后面试官说现在不问八股了)8. 同7,又是一段代码,给出改进意见(utils类型要封装useHooks,代码逻辑耦合,useContext太重导致频繁渲染)9. when,where二面1. 同上,不过深入询问了2. 上一段也是字节,为什么离职3. 说下你用openclaw进行飞书管理后台61个模块改造提效的过程体会4. 算法:get(obj,'a[0].b.c'),获取obj中对应的字段的值5. 算法:ShuffleArr,输入[1,2,3],随机打乱进行输出,每一个数字出现在各个位上的概率是相同的6. harness engineering7. when,where三面(ld)1. 现在让你对一个大型仓库进行业务开发,如何利用AI提效(按照模块or业务进行多Agent各自读取,产生一个各自模块的总结,结合AGENTS.md啥的看能不能补充足够的上下文,然后再开发。其实我是想到什么说什么的)2. 那对于小仓库呢,也要多agent吗?如果宕机了怎么办?怎么控制并发数目?那你可不可以把上面的做成一个插件,你会怎么设计(我说仓库的大小我也不知道怎么界定,那么就让用户选择是否需要多agent分析吧,反正要分析得到一个上下文md,然后是业务开发的agent进行开发,为了避免开发中途宕机or什么问题,所以可以借鉴OpenSpec的tasks.md文件,将开发任务拆成一个个小task,然后完成一个标记一个。至于并发数目我也不明白,暂时就根据用户电脑内存来划分吧,然后测试阶段加一个QA Agent,配上一些可观测数据啥的测试就行。然后说了下上下文焦虑的问题,)3. when,where反问:harness engineering贵部门怎么搭建的?流水线还是多agent协作?hr面1. 面试感受2. 为什么上一段离职3. 你是慢热型的吗4. 介绍工作强度(10-10),团队氛围5. 有很低概率审批挂,or加面反问:为什么面试官感觉都这么懂AI?比我之前面试的AIDP面试官还要厉害的感觉?答:剪映是字节AI试点的业务部门,在大力推AI暂时没有消息,4.15房租到期,俺就要会重庆了,不管怎么样吧,终于还是离开了待了9个月左右的上海,物价没有想的那么贵,虽然房租确实贵,但是吃的还能接受,外卖价格也差不多,但还是怀恋重庆的美食,哪怕回到重庆随便找一家公式化重庆小面品尝一下,都是一件多么棒的美事儿啊
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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