字典序第k小数字

func findKthNumber(n int, k int) int { cur := 1 k-- for k > 0 { cnts := dfs(cur, cur,n) fmt.Println(cnts) if cnts <= k { //当前层cur,第cnts小的数比第k小还小,那么当前层的所有cnts个数都可以取,递归到下一层去找 k -= cnts cur++ } else {// 答案在当前节点的子节点中,则从当前cur层的最小子节点开始找,cur=cur*10 k-- cur *= 10 } } return cur } func dfs (l, r,n int) int{//l,r分别是最小和最大子节点,返回值是递归开始层~当前层所有的子节点数 //两个递归终止条件 if l > n { return 0 } if r > n { r = n } //当前层有 r - l + 1 个节点可取,递归到下一层。 // l * 10: 从10变成100, r * 10 + 9: 从19变成199 return r - l + 1 + dfs(l * 10, r * 10 + 9,n) }
等风起的那一天,我已准备好一切
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-08-18 文件系统--inode节点
2020-08-18 mmap文件映射过程
2020-08-18 Linux文件系统(上)
2020-08-18 字符串加法
2019-08-18 使用vim编译.cpp文件
2019-08-18 vi/vim编辑器基本操作