数据结构学习 jz44 数字序列中某一位的数字

关键词:找规律 数学

题目:LCR 163. 找到第 k 位数字

虽然做出来了但是做了十万年,我是猪。主要还是找到准确的规律。

思路:

    //找规律

    //0-9 占了10个位置

    //10-99 占了90*2个位置

    //100-999 占了900*3个位置

    //1000-9999 占了9000*4个位置

总体求解顺序:

        1、 确定要求的数字的位数

        2、再确定数字

        3、再确定要求的数字的第b位

比如:

k==479

        1、 确定要求的数字的位数

                479-10-90*2=289>0 说明大于99

                479-10-90*2-900*3=-2411<0 说明小于999

                可以确定要求的数y是i=2位数,y在100-999区间内,这个区间的每个数都得占3个字符。

                并且说明y里我们要求的res排在100-999这个区间里的第289个字符。

        long long x=k;//注意这里不能用int 会爆long long rex = 1;//10 100 1000int i = 1;//存位数while (x >= 0)//确定位数:一点一点减,减到合适的位置 x=x-9*10^(i-1)*i{rex *= 10;i++;x = x - (rex*9) * i;//479-10-90*2-900*3=-2411}x = x + (rex * 9) * i;//479-10-90*2=289

        2、再确定数字是几

                在100-999这个区间内每个数都得占3个字符。

                a=x/i:a=289/2=96,y排在100-999这个区间里的第96个数字。

                为什么/i?因为这个区间一个数字由i个字符组成

                得到a和i,现在我们已经可以确定y了:a加上这个区间的最小数rex=100 即y=rex+a=100+96=196

long long a = x / i;//a=x/i:a=289/2=96,y排在100-999这个区间里的第96个数字//为什么/i?因为这个区间一个数字由i个字符组成
long long res = rex + a;//现在我们已经可以确定y了:a加上这个区间的最小数rex=100 即y=rex+a=100+96=196

        3、再确定要求的数字的第b位

                确定我们要求的数字在y里的位置:b = x % i=1。

                //因为求的是从左往右数的第b位,而不是我们习惯的从右往左数,所以要除的10的个数是i-b-2

                //比如1234,b是2,那么得除两次10,即i-b-2=4-2-1=1 j=<1 除了两次10

                最后求模,得到个位数,就是我们需要的。

        long long b = x % i;//还需要确定我们要求的数字在y里的位置:b = x % i=1//因为求的是从左往右数的第b位,而不是我们习惯的从右往左数,所以要除的10的个数是i-b-2//比如1234,b是2,那么得除两次10,即i-b-2=4-2-1=1 j=<1 除了两次10for(int j=0;j<=i-b-2;j++){res=res/10;}res=res%10;//求模

复杂度计算:

时间复杂度O(logk) 确定位数

空间复杂度O(1) 只用了常数个空间没有开辟新的空间存别的

代码:

class Solution {
public://找规律//0-9 占了10个位置//10-99 占了90*2个位置//100-999 占了900*3个位置//1000-9999 占了9000*4个位置//可以先确定要求的数字的位数,再确定数字,再确定要求的数字的第b位//比如:k==479//479-10-90*2=289>0 479-10-90*2-900*3=-2411<0 可以确定要求的数y是i=2位数//说明y里我们要求的res排在100-999这个区间里的第289个字符//a=x/i:a=289/2=96,y排在100-999这个区间里的第96个数字//为什么/i?因为这个区间一个数字由i个字符组成//现在我们已经可以确定y了:a加上这个区间的最小数rex=100 即y=rex+a=100+96=196//还需要确定我们要求的数字在y里的位置:b = x % i=1//因为求的是从左往右数的第b位,而不是我们习惯的从右往左数,所以要除的10的个数是i-b-2//比如1234,b是2,那么得除两次10,即i-b-2=4-2-1=1 j=<1 除了两次10//最后求模就可以啦int findKthNumber(int k) {if (k < 10) return k;k = k - 10;long long x=k;//注意这里不能用int 会爆long long rex = 1;//10 100 1000int i = 1;//存位数while (x >= 0)//确定位数:一点一点减,减到合适的位置 x=x-9*10^(i-1)*i{rex *= 10;i++;x = x - (rex*9) * i;//479-10-90*2-900*3=-2411}x = x + (rex * 9) * i;//479-10-90*2=289long long a = x / i;//a=x/i:a=289/2=96,y排在100-999这个区间里的第96个数字//为什么/i?因为这个区间一个数字由i个字符组成long long b = x % i;//还需要确定我们要求的数字在y里的位置:b = x % i=1long long res = rex + a;//现在我们已经可以确定y了:a加上这个区间的最小数rex=100 即y=rex+a=100+96=196//因为求的是从左往右数的第b位,而不是我们习惯的从右往左数,所以要除的10的个数是i-b-2//比如1234,b是2,那么得除两次10,即i-b-2=4-2-1=1 j=<1 除了两次10for(int j=0;j<=i-b-2;j++){res=res/10;}res=res%10;//求模return res;}
};

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

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

相关文章

优思学院|质量管理五大工具和七大手法要点总结|2024

在现代企业管理中&#xff0c;质量管理是核心竞争力的重要组成部分。它不仅关系到产品的品质&#xff0c;更直接影响到企业的市场信誉和经济效益。本文将深入探讨质量管理中的五大工具及七大手法&#xff0c;这些工具和手法都贯穿了六西格玛DMAIC五步的方法论之中&#xff0c;是…

主流图片压缩格式

主流图片压缩格式主要分为两类&#xff1a;有损压缩和无损压缩。这些格式根据不同的应用场景和需求被广泛使用。 下面是一些常见的图片压缩格式&#xff1a; 有损压缩格式 JPEG (Joint Photographic Experts Group): 最常见的图片格式之一&#xff0c;广泛用于网页图像、摄影和…

「JavaSE」类和对象2

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 类和对象2 &#x1f349;匿名对象&#x1f349;关键字static&#x1f34c;static修饰成员变量&#x1f34c;static修饰成员方法&…

如何正确使用数据库的读写分离

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 背景 在应用系统发展的初期&#xff0c;我们并不知…

uniapp使用Android Studio离线打包

环境准备 Android Studio&#xff1a; 下载地址APP离线SDK下载&#xff1a; 下载地址; 目前我使用得是“Android-SDK3.8.7.81902_20230704”&#xff1b;需要与hbuider版本配套使用。Appkey: 参考我 以上三步准备好后&#xff0c;进行接下来的不住&#xff1a; 准备工程 导…

SpringCloud Config配置中心详解及环境搭建

前言 我们之前介绍并且搭建过eureka、zuul、hystrix组件。本节介绍的config是SpringCloud五大组件的最后一个&#xff0c;还有一个是Ribbon ----- 客服端负载均衡&#xff0c;之前我们有简单介绍过☞Eureka、Nacos注册中心及负载均衡原理&#xff0c;直接使用注解LoadBalanced…

统计学习 复习(知识点+习题)

复习资料&#xff1a;https://github.com/RuijieZhu94/StatisticalLearning_USTC 第一章 线性回归 1. From one to two 最小二乘 课后题 有偏/无偏估计 加权最小二乘 2. Regularization 线性回归&#xff08;二维情况&#xff09; 求解有约束优化问题 正则化最小加权二乘…

MySQL数据库SQL优化详解

MySQL数据库SQL优化是一个涵盖广泛的主题&#xff0c;涉及索引、查询结构、数据类型选择、存储引擎、事务处理等多个方面。以下是一些关键的SQL优化策略和技巧&#xff1a; 1. 索引优化 创建合适的索引&#xff1a;对经常出现在 WHERE、JOIN 条件、ORDER BY 和 GROUP BY 子句…

ByConity 社区回顾|ByConity 和开发者们一起展望未来,携手共进!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 新年伊始&#xff0c;我们想在这里感谢一群 ByConity 社区的小伙伴们。 正是因为有社区的开发者的支持&#xff0c;截止到 2023 年底&#xff0c;ByConity GitHub …

Python 格式化输出:精确控制你的数据表示

目录 旧式的 % 运算符&#xff08;不推荐&#xff09; str.format() 方法 位置和关键字参数&#xff1a; 格式化数字&#xff1a; f-string 表达式和函数调用&#xff1a; 格式化数字&#xff1a; 格式规范的微调 &#xff08;核心&#xff09; 对齐字符串 填充字符 …

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑥

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回结果“ax&#xff1a;”&#xff08;x为2、3或4&#xff09;&#xff1b;其中变量x、y均须为整型。编写程序代码&#xff0c;使用JUnit框架编写测试类对编写的程序代码进行测试…

Java基础 - 黑马

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

第二十四章 $ZF Callout 快速参考 - $ZF()调用iriszf库

文章目录 第二十四章 $ZF Callout 快速参考 - $ZF()调用iriszf库$ZF()调用iriszf库$ZF() $ZF(-3): Call by Name$ZF(-3) 第二十四章 $ZF Callout 快速参考 - $ZF()调用iriszf库 $ZF()调用iriszf库 如果调用$ZF()时不带负数参数(例如&#xff0c;$ZF("myFunction "&…

剖析一下Mask R-CNN获得实例分割的这三个步骤。第一步,利用先验框获得建议框。第二步,利用建议框获得预测框。第三步,利用预测框获得语义分割结果。

问题描述&#xff1a; 剖析一下Mask R-CNN获得实例分割的这三个步骤。第一步&#xff0c;利用先验框获得建议框。第二步&#xff0c;利用建议框获得预测框。第三步&#xff0c;利用预测框获得语义分割结果。 问题解答&#xff1a; 生成建议框&#xff08;Region Proposal&…

Linux IDEA 安装及环境配置

Linux系统安装IDEA保姆级教程_linux安装idea-CSDN博客 下载tar.gz解压缩添加环境变量&#xff1a; vim ~/.bashrc export IDEA_HOME/usr/local/src/idea/idea-IC-213.6777.52 export PATH:$PATH:${IDEA_HOME}/bin source ~/.bashrc验证环境&#xff1a;echo $PATH即可在任意目录…

使用MATLAB连接USRP

文章目录 前言一、本地环境二、前期准备1、MATLAB版本、labview版本、UHD 版本对应关系2、下载 GNU Radio Companion3、确定 USRP UHD 版本①、下载一个 USRP 硬件驱动程序②、确认 MATLAB 的 UHD 版本 三、下载 USRP 通信工具箱支持包四、使用 MATLAB 连接 USRP 前言 本文记录…

基于opencv的直线检测(pythonC++)

提供了直线检测python与C版本&#xff0c;用于检测竖直线与横线&#xff0c;主要流程为&#xff1a;图像二值化Canny边缘检测霍夫直线变换直线检测 一、python实现 import shutilimport osimport cv2 import numpy as npfilename "20230525-173637.jpg" file_ext …

F-Droid:开源Android应用的宝库

F-Droid&#xff1a;开源Android应用的宝库 引言 F-Droid是一个开源应用程序存储库&#xff0c;旨在为安卓用户提供自由、隐私和安全的应用程序。它最初于2010年由Ciaran Gultnieks创建&#xff0c;因为他认为Google Play Store上的应用程序不够透明和安全。F-Droid的目标是为…

Web3与环保:区块链如何推动可持续发展

随着气候变化和环境问题日益严峻&#xff0c;社会对可持续发展的需求变得愈发迫切。在这个背景下&#xff0c;Web3技术和区块链崭露头角&#xff0c;成为推动可持续发展的关键力量。本文将深入探讨Web3技术如何与环保理念相结合&#xff0c;引领我们迈向更加可持续的未来。 1. …

AtCoder Beginner Contest 336 D - Pyramid

题目链接 题意&#xff1a;就是给你一个长为n的序列&#xff0c;让你通过两种不限次数的操作 使其变为金字塔序列&#xff0c;(a1<a2<ak>ak-1>ak-2...>an) 两种操作分别是1&#xff1a;让任何一个数减一&#xff1b;2&#xff1a;去掉队头队尾 其实我们想这和…