题解 | #数字序列中某一位的数字#

数字序列中某一位的数字

http://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5

解题思路:

梳理一下其中的规律:

小于10,1~9,9个数字,9位

小于100,10~99,90个数字,180位

小于1000,100~999,900个数字,2700位

各个区间的上下限是[0,10),[10,100),[100,1000)...位数是1,2,3...


所以整体的解题步骤为: > 1. 先确定第n个数在哪个区间内; > 2. 再确定这个数属于哪个自然数; > 3. 最后所在自然数得出数字

首先从第一个区间的上限开始寻找,如果大于上限则不在这个区间,则从n里剔除这个区间的能容纳的数量,也即是将(n=n(上限-下限)位数);此时将上限值赋给下限,上限10,位数+=1,开始从下个区间寻找,直到找到n所在的区间

找到区间后,通过(n/位数+下限)找到所在区间对应的自然数;然后(n%位数)作为下标,找到自然数中的数字,也就是题目的第n个数字


function findNthDigit( n ) {
    // write code here
    let digitCont = 1; //位数
    let bottom = 0, top = 10;
    while(n > (top - bottom) * digitCont){
        n -= (top - bottom) * digitCont;
        digitCont += 1
        bottom = top, top = top * 10;
    }
    //在取件的位置再加下限就得出哪个数字
    let num = parseInt(n / digitCont) + bottom;
    let r = n % digitCont;
    return num.toString()[r]
    
    
}

*ps:0有些特殊,下面的区间还是从0开始,他会在秋末运算的时候,让每个区间的首位数字变成第0位。——一点不太确定的思考*

参考:https://blog.nowcoder.net/n/a4a902bb309741da8957f0a49d1c0df5?f=comment

牛客算法题 文章被收录于专栏

牛客算法题记录

全部评论

相关推荐

白火同学:先说结论,准大三不是特别好找实习,boss沟通300+没有实习是很正常的情况。一是暑期实习时间太短了,二是在这么多准大四都找不到实习,从实习时间和掌握技术层面,企业会优先看他们。 再说简历,其实985本+准大三到这水平的简历也很优秀了,要说的话,项目经历可以再优化一下,可以基本围绕采取STAR原则,分为项目概述、技术架构、技术亮点、实现结果,再发给AI润色一下。 最后说操作,准大三的话,如果想找实习那就多投,不过现在也7月中旬了,时间上已经略晚了。如果7月底实在找不到,也可以多刷点算法,多学点技术,这实习也不至于一定得有,当然有更好。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-18 18:45
已编辑
中山职业技术学院 Java
投递TP-LINK等公司10个岗位
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务