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

数字序列中某一位的数字

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

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

牛客算法题记录

全部评论

相关推荐

6 收藏 评论
分享
牛客网
牛客企业服务