题目描述
解题思路(数学规律)
- 本题主要是寻找数学规律,通过暴力的方法肯定是超时的,下面就简单介绍下本题的解题思路,我认为核心还是在于理解将字符串拆分为不同位数的区间。
- 首先判断n在哪一个区间,区间的划分按照 1 - 9,10-99,100-999...
- 计算下标n在当前区间的哪一个
- 求出n下标对应的真实的数字
- 求出该真实数字的哪一位是我们最终要返回的结果
公式
n下标对应的真实数字=区间起始值+(区间第几个−1)/第几个区间
真实数字的哪一位=(区间第几个−1)%第几个区间取余
解题代码
var findNthDigit = function(n) {
if (n < 10) {
return n;
}
let numInterval = 0;
for (let i = 1; i < 100; i++) {
if ((n - 9) < 9 * Math.pow(10,i) * (i+1)) {
numInterval = i+1;
break;
}
}
for (let i = 0; i < numInterval-1; i++) {
n = n - 9 * (10 ** i) * (i+1);
}
const trueNum = 10 ** (numInterval - 1) + parseInt( (n - 1) / numInterval )
const numIndex = (n - 1) % numInterval;
return String(trueNum)[numIndex]
};
复制代码
总结(本题给我们的启示思路)