稀碎从零算法笔记Day35-LeetCode:字典序的第K小数字

要考虑完结《稀碎从零》系列了哈哈哈

这道题和【LC.42 接雨水】,我愿称之为【笔试界的颜良&文丑】

题型:字典树、前缀获取、数组、树的先序遍历

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

来源:LeetCode

题目描述(红字为笔者添加)

这道题说实话,看不懂是其hard的很大一个原因

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

这边笔者解释下什么是字典序

440. 字典序的第K小数字 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/solutions/1358635/zi-dian-xu-de-di-kxiao-shu-zi-by-leetcod-bfy0/

笔者的理解是:【字典序】重点在上,那么作为一个【排序方式】,它的法则即使”按照数字的前缀的大小、长度进行排序“(例子:1,10,100,101,102,11,2……11在101前面,因为11的前缀是”1“,而101前缀是”10“,因此101在11前面;2前缀(虽然没有前缀吧)是2,比1大,因此凡是2打头的,都排在1打头的后面)

题目样例

示例 1:

输入: n = 13, k = 2
输出: 10
解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。

示例 2:

输入: n = 1, k = 1
输出: 1

提示:

  • 1 <= k <= n <= 109

题目思路

笔者的思路来自LC宫水三叶(他的题解有点难看懂,但好在最后还是看懂了,需要有不错的code经验和思路)

LC宫水三叶题解icon-default.png?t=N7T8https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/solutions/1360662/by-ac_oier-m3zl/

这道题第一个难点,就是知道他是怎么排序的
配合题目描述那里的”十叉树“ ,不难可以看出,遍历方式是”十叉树的先序遍历“,那么本题就是【返回十叉树的先序遍历的第K个数】——>通关了(bushi)

这种方法固然可行,但本题只给了k和n(右边界),创一个不熟悉的数据结构(二叉树笔者都不是很熟悉)不为明智之举。

但这个思路还是很重要的突破口,这时候可以转换一个这个遍历方式:起点是1,1遍历的方向只有【下】和【左】,且以后的节点也是如此。”1向左走“需要满足1这个树下面,没有其他的分支,连10都不能有,这就要求n是小于10的。而”1向下走“,就需要1有”孩子节点“,即以1为前缀的一众节点

那么问题,就可以转化为”看看第k个数是以谁为前缀的?“这个问题。而这个问题,难点就是”求出以各个数为前缀的数的个数“,然后看看k是否在这个范围内:①k在的话,那么k-1,i*10(k-1是跳过i这个数,i*10是i后面的第一个数,即使 i0 )。②k不在,即k>num的话,说明以 i 为前缀的所有数都不满足条件,那么i+1(相当于从1走向2),k-num。③如果k = num,说明第k个数就是最后一个以 i 为前缀的数(这种情况可以归于情况①)

然后就是”求满足条件的数的个数“:举个例子比较直观——比如说n是12345,要求以122为前缀的数的个数。那么截取12345的前3位【123】。以122为前缀的数中,1220—1229是一定<12345的,因此ans+=10。而122又是小于123的,那么说明,所有122为前缀的数都满足条件,即ans+=pow(10,2).。
以上例子是122<123的情况,假如是125>123,那么满足条件的只能是125X系列,即10个
                                              假如是 123 == 123,那么满足条件的除了123X系列,还有【12300,12345】这个区间内的

C++代码

参考三叶思路的CPP coding

class Solution {
public:int findKthNumber(int n, int k) {//题目需求:返回第K小的数字,排序是按照:前缀越小,越靠前 // 三叶的题解 int ans = 1;while(k > 1){   int num = getNum(ans,n);//num是以ans为前缀的数字的个数if(num >= k)//第K个数在以ans为前缀的数字中{ans *=10;k--;}else{ans ++ ;//以ans为前缀的这一大堆都不行,得换一个前缀k-=num;//相当于抛弃了以ans为前缀的那一大堆,从ans+1开始数}}// k == 1,说明1就是答案return ans;}// 获取合法前缀的数字个数int getNum(int ans,int n){string temp1 = to_string(ans),temp2 = to_string(n);int len1 = temp1.length(),len2=temp2.length(),div = len2 - len1;//div表示n比ans多了多少位string temp3 = temp2.substr(0,len1);int answer = 0;//接收前缀的个数int int3 = stoi(temp3);// 把位数短的数字的个数先获取出来for(int i=0;i<div;i++)answer += (int)pow(10,i);//n比ans长的部分if(ans < int3){answer += (int)pow(10,div);//pow返回double类型}if(ans == int3)//前缀相等answer += n - ans * (int)pow(10,div) + 1;//以1024和10为例子,那么10为前缀的个数是[00-24],工24+1 = 25 个数字;return answer;}
};

结算页面

 

还需要努力!

你好,四月

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293142.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(文章复现)考虑分布式电源不确定性的配电网鲁棒动态重构

参考文献&#xff1a; [1]徐俊俊,吴在军,周力,等.考虑分布式电源不确定性的配电网鲁棒动态重构[J].中国电机工程学报,2018,38(16):4715-47254976. 1.摘要 间歇性分布式电源并网使得配电网网络重构过程需要考虑更多的不确定因素。在利用仿射数对分布式电源出力的不确定性进行合…

鸿蒙HarmonyOS应用开发之HID DDK开发指导

场景介绍 HID DDK&#xff08;HID Driver Develop Kit&#xff09;是为开发者提供的HID设备驱动程序开发套件&#xff0c;支持开发者基于用户态&#xff0c;在应用层开发HID设备驱动。提供了一系列主机侧访问设备的接口&#xff0c;包括创建设备、向设备发送事件、销毁设备。 …

负载均衡策略和技术的基本指南

什么是负载均衡器? 负载均衡器将传入的网络流量分布到多个服务器上,以确保没有单个服务器承受过多的负载。通过有效地传播请求,它们提高了应用程序的容量和可靠性。 下面是一些使用负载均衡器的常见场景: 高并发流量:当应用程序面临大量用户请求时,负载均衡器可以将流量分…

【4】单链表(有虚拟头节点)

【4】单链表&#xff08;有虚拟头节点&#xff09; 1、虚拟头节点2、构造方法3、node(int index) 返回索引位置的节点4、添加5、删除6、ArrayList 复杂度分析(1) 复杂度分析(2) 数组的随机访问(3) 动态数组 add(E element) 复杂度分析(4) 动态数组的缩容(5) 复杂度震荡 7、单链…

七、函数的使用方法

函数的调用 nameinput&#xff08;&#xff09;#输入参数并赋值name print&#xff08;name&#xff09;#d打印name 格式&#xff1a;返回值函数名&#xff08;参数&#xff09; def get_sum(n):#形式参数计算累加和:param n::return: sumsum0for i in range(1,n1):sumiprint…

9.Python类与对象

1 面向对象 类和对象都是面向对象中的重要概念。面向对象是一种编程思想&#xff0c; 即按照真实世界的思维方式构建软件系统。 例如&#xff0c;在真实世界的校园里有学生和老师&#xff0c;学生有学号、姓名、所 在班级等属性&#xff08;数据&#xff09;&#xff0c;还有…

【苹果MAC】苹果电脑 LOGI罗技鼠标设置左右切换全屏页面快捷键

首先键盘设置->键盘快捷键 调度中心 设置 f1 f2 为移动一个空间&#xff08;就可以快捷移动了&#xff09; 想要鼠标直接控制&#xff0c;就需要下载官方驱动&#xff0c;来设置按键快捷键&#xff0c;触发 F1 F2 安装 LOGI OPTIONS Logi Options 是一款功能强大且便于使用…

前端虚拟滚动列表 vue虚拟列表

前端虚拟滚动列表 在大型的企业级项目中经常要渲染大量的数据&#xff0c;这种长列表是一个很普遍的场景&#xff0c;当列表内容越来越多就会导致页面滑动卡顿、白屏、数据渲染较慢的问题&#xff1b;大数据量列表性能优化&#xff0c;减少真实dom的渲染 看图&#xff1a;绿色…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数&#xff08;Virtual Constructor&#xff09;模式或者多态性工厂&#xff08;Polymorphic Factory&#xff09;模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口&#xff0c;将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

第六十三回 呼延灼月夜赚关胜 宋公明雪天擒索超-大模型BERT、ERNIE、GPT和GLM的前世今生

神行太保戴宗报信&#xff0c;关胜人马直奔梁上泊&#xff0c;请宋江早早收兵&#xff0c;解梁山之难。宋江派了花荣到飞虎峪左边埋伏&#xff0c;林冲到右边埋伏&#xff0c;再叫呼延灼带着凌振&#xff0c;在离城十里附近布置了火炮&#xff0c;然后才令大军撤退。 李成闻达…

Kubernetes(K8s)技术解析

1. K8s简介 Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排平台&#xff0c;旨在简化容器化应用程序的部署、扩展和管理。为开发者和运维人员提供了丰富的功能和灵活的解决方案&#xff0c;帮助他们更轻松地构建、部署和管理云原生应用程序。以下是关于Kubern…

Oracle 低代码平台 Apex 最新版本 23.2 安装过程

趁春节快结束前&#xff0c;安装了一把APEX &#xff0c;到目前为此&#xff0c;APEX最新版本为23.2&#xff0c;23.2和21版本有一些变化&#xff0c;只是用于验证&#xff0c;我 是使用的单独模式&#xff0c;没有安装TOMAT&#xff0c;下面列一下安装过程&#xff1a; 1.环境…

云服务器8核32G配置报价大全,腾讯云、阿里云和京东云

8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…

阿里云通用算力型u1云服务器配置性能评测及价格参考

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

Kafka入门到实战-第五弹

Kafka入门到实战 Kafka常见操作官网地址Kafka概述Kafka的基础操作更新计划 Kafka常见操作 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流平台&…

Unity 使用TrailRenderer制作拖尾效果

使用TrailRenderer实现拖尾效果&#xff0c;具体操作步骤如下&#xff1a; 1、创建一个空对象 在Unity场景中创建一个空对象 2、添加TrailRenderer组件 选择步骤1创建的空对象&#xff0c;然后在Inspector面板中点击“Add Component”按钮&#xff0c;搜索并添加TrailRende…

中间件安全(apache、tomcat)

靶场&#xff1a; vulfocus Apache Apache HTTP Server 是美国阿帕奇&#xff08; Apache &#xff09;基金会的一款开源网页服务器。该服务器具有快速、可靠且可通过简单的API进行扩充的特点&#xff0c;发现 Apache HTTP Server 2.4.50 中针对 CVE - 2021 - 41773 的修复…

算法学习——LeetCode力扣图论篇3(127. 单词接龙、463. 岛屿的周长、684. 冗余连接、685. 冗余连接 II)

算法学习——LeetCode力扣图论篇3 127. 单词接龙 127. 单词接龙 - 力扣&#xff08;LeetCode&#xff09; 描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> … -> sk&#xff1a; 每一对相…

REPLUG:检索增强的黑盒语言模型

论文题目&#xff1a;REPLUG: Retrieval-Augmented Black-Box Language Models   论文日期&#xff1a;2023/05/24   论文地址&#xff1a;https://arxiv.org/abs/2301.12652 文章目录 Abstract1. Introduction2. Background and Related Work2.1 Black-box Language Model…

HarmonyOS 应用开发之FA模型绑定Stage模型ServiceExtensionAbility

本文介绍FA模型的三种应用组件如何绑定Stage模型的ServiceExtensionAbility组件。 PageAbility关联访问ServiceExtensionAbility PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceAbility的方式完全相同。 import featureAbility from ohos.ability…