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

数字序列中某一位的数字

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

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

牛客算法题记录

全部评论

相关推荐

粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
6 收藏 评论
分享
牛客网
牛客企业服务