当前位置: 首页 > news >正文

6.9-字典序的第K小数字

440. 字典序的第K小数字 - 力扣(LeetCode))

    • 思路

      十叉树上求解第k小数字的解法

      总结:

      1.十叉树的字典序遍历

      2.逐层求解十叉树的子树节点个数的写法

      先序遍历这棵树,等价于从左到右遍历字典序列表。所以先序遍历访问到的第 k 个节点就是答案。

      从根节点的第一个儿子 1 开始。由于该节点被我们访问了,先把 k 减一。

      分类讨论:

      如果子树 1 的大小(节点个数)≤k,那么答案不在子树 1 中。把 k 减去子树大小,然后考虑下一个儿子 2,依此类推。 否则,答案在子树 1 中。首先访问 1 的儿子 10,把 k 减一。依次考虑 1 的儿子 10,11,12,…,19,计算子树大小,比较子树大小与 k 的大小关系,依此类推。 问:为什么判断条件是子树大小 ≤k 而不是 <k?

      答:因为当我们访问到子树根节点时,就把 k 减一了。这时再算子树大小,就把根节点重复统计了,所以是子树大小减一 <k,即子树大小 ≤k。

    • 代码

      class Solution {public int findKthNumber(int n, int k) {int root = 1;k--;while(k > 0) {int size = countSubTreeSize(n, root);if(k >= size) {k -= size;root++;} else {root *= 10;k--;}}return root;}public static int countSubTreeSize(int n, int root) {int size = 0;long left = root;long right = root + 1;while(left <= n) {size += Math.min(n + 1, right) - left;left *= 10;right *= 10; }return size;}
      }

http://www.xdnf.cn/news/954649.html

相关文章:

  • 【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
  • 【标准解析】商用车CAN网络通信标准(J1939)
  • 【案例篇】为什么设置了 ulimit 但 nofile 限制仍不生效?
  • Cursor 使用分享
  • Java网络编程协议全面解析
  • SQL进阶之旅 Day 22:批处理与游标优化
  • OSPF域内路由
  • 检查项目中的依赖是否有更新——npm outdated
  • Linux基础开发工具——vim工具
  • 2021-03-15 iview一些问题
  • Map相关知识
  • 中小企业碳账本管理指南
  • SpringAI实战:ChatModel智能对话全解
  • 对比一下blender快捷键:p和alt+p
  • 基于Flask前后端分离智慧安防小区系统
  • 定位触发DMA2_Stream1_IRQHandler中断的具体原因简述
  • Spring类型转换融入IOC生命周期
  • 字符串哈希+KMP
  • 五.建造者模式
  • SQLAlchemy的子查询subquery()
  • 日本本社企业直招|Java /cobol/C#/PM/PL/Salesforce/AWS/SAP 等,正社员/個人事業主,高度人才+20 分
  • Spring状态机
  • 苍穹外卖-day02
  • 机器人模仿学习调研(二)
  • MySQL 8.0 OCP 英文题库解析(十三)
  • Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
  • fpga系列 HDL : Microchip FlashPro 导出与烧录FPGA
  • 6.9本日总结
  • 网络安全A模块专项练习任务六解析
  • python打卡day49@浙大疏锦行