题解 | #数字序列中某一位的数字#
数字序列中某一位的数字
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
牛客算法题 文章被收录于专栏
牛客算法题记录