【剑指Offer】-数字序列中的某一位

题目链接:剑指Offer44数字序列中的某一位
题目描述:

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
示例 1:1
输入:n = 3
输出:3

示例 2:
输入:n = 11
输出:0

限制:
0 <= n < 2^31

题解:数字序列中的某一位题解

1.确定所求数位的所在数字的位数
2.确定所求数位的数字num
3.确定所求数位是num中的哪一位


/**
 * @param {number} n
 * @return {number}
 */
var findNthDigit = function(n) {
    let digit = 1;  //数的位数
    let start = 1;  //每 digit 位数的起始数字(即:1, 10, 100)
    let count = 9;  //每digit位数的数字所占位数

    while(n > count)    //1.确定n的位数
    {
        n -= count;
        digit += 1;
        start *= 10;
        count = digit * start * 9;
    }

    //2.确定是哪个数字
    let num = start + Math.floor((n - 1) / digit);
    //3.确定是该位数字的哪一位
    return num.toString().charAt((n-1)% digit) - 0;
};

posted @ 2022-03-30 10:30  张宵  阅读(18)  评论(0编辑  收藏  举报