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

Leetcode 440. 字典序的第K小数字

1.题目基本信息

1.1.题目描述

给定整数 n 和 k,返回 [1, n] 中字典序第 k 小的数字。

1.2.题目地址

https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/description/

2.解题方法

2.1.解题思路

字典树思路

记第i小结点为ni,ni子树中节点数为steps,由于进行的是前序遍历,则如果k-i>=steps,第k小的节点一定不在ni的子树中,则需要往ni的右侧相邻兄弟节点进行遍历;如果k-i<steps,则第k小的节点一定在ni的子树中,则节点往ni的最左侧子节点走;

重复上面两步,更新i,直到i=k,即得到题解。(注:这里不用担心以9结尾的数字没有兄弟节点的问题,通过模拟知道不会走到这一步)

2.2.解题步骤

第一步,构建维护变量。k维护k-i的值,即当前节点到第k小结点的距离;val维护第i小的节点的值

第二步,构建getSteps函数,获取值为val的节点子树中节点数,使用广搜的方法

第三步,记steps=getSteps(val),如果k>=steps,则第k小的节点不在当前节点的子树中,节点往当前节点的右相邻兄弟节点走,更新val=val+1,更新k=k-steps;如果k<steps,则第k小的节点一定在当前节点的子树中,节点往当前节点的最左侧子节点走,更新val=val*10,更新k=k-1

3.解题代码

python代码

class Solution:def findKthNumber(self, n: int, k: int) -> int:# 思路:字典树思路。记第i小结点为ni,ni子树中节点数为steps,由于进行的是前序遍历,则如果k-i>=steps,第k小的节点一定不在ni的子树中,则需要往ni的右侧相邻兄弟节点进行遍历;如果k-i<steps,则第k小的节点一定在ni的子树中,则节点往ni的最左侧子节点走;重复上面两步,更新i,直到i=k,即得到题解。(注:这里不用担心以9结尾的数字没有兄弟节点的问题,通过模拟知道不会走到这一步)# 第一步,构建维护变量。k维护k-i的值,即当前节点到第k小结点的距离;val维护第i小的节点的值k -= 1val = 1# 第二步,构建getSteps函数,获取值为val的节点子树中节点数,使用广搜的方法def getSteps(nodeVal:int) -> int:steps, first, last = 0, nodeVal, nodeValwhile first <= n:steps += min(last, n) - first + 1first = first * 10last = last * 10 + 9return steps# 第三步,记steps=getSteps(val),如果k>=steps,则第k小的节点不在当前节点的子树中,节点往当前节点的右相邻兄弟节点走,更新val=val+1,更新k=k-steps;如果k<steps,则第k小的节点一定在当前节点的子树中,节点往当前节点的最左侧子节点走,更新val=val*10,更新k=k-1while k > 0:steps = getSteps(val)if k >= steps:val += 1k -= stepselse:val *= 10k -= 1return val

4.执行结果

http://www.lryc.cn/news/573084.html

相关文章:

  • C++ CAN总线数据处理框架解析
  • 力扣1477. 找两个和为目标值且不重叠的子数组
  • YOLO官方自带的数据集Dotav1,直接训练
  • Python爬虫实战:研究threading相关技术
  • 状态模式详解
  • Filecoin系列 - IPLD 技术分析
  • verilog HDLBits刷题“Module shift8”--模块 shift8---模块和向量
  • Python 的内置函数 hasattr
  • 中国设计 全球审美 | 安贝斯新产品发布会:以东方美学开辟控制台仿生智造新纪元
  • 【Koa系列】10min快速入门Koa
  • 蓝牙 5.0 新特性全解析:传输距离与速度提升的底层逻辑(面试宝典版)
  • 项目开发中途遇到困难的解决方案
  • 深入解析BERT:语言分类任务的革命性引擎
  • 创业知识概论
  • tkinter Entry(输入框)组件学习指南
  • 加密货币:比特币
  • 5.3 LED字符设备驱动
  • HarmonyOS 6 + 盘古大模型5.5
  • 【Python】Excel表格操作:ISBN转条形码
  • 西门子S7通信协议抓包分析应用
  • 【入门级-基础知识与编程环境:NOI以及相关活动的历史】
  • AI 产品的“嵌点”(Embedded Touchpoints)
  • python打卡day37
  • 智能体互联网新闻速递及深度分析【250620】
  • STM32[笔记]--开发环境的安装
  • 大数据Hadoop集群搭建
  • Linux (2)
  • Java常见八股-(6.算法+实施篇)
  • 知识蒸馏(Knowledge Distillation, KD)
  • gitea本地部署代码托管后仓库的新建与使用(配置好ssh密钥后仍然无法正常克隆仓库是什么原因)