题目描述
- 比较偏数学的一道题。。众所周知这类题代码量都不大,但是就是难想= =
思路 && 代码
- 这篇题解写得很好~
- 建议还是直接看上面的题解(结合图更好理解),这边我只是写上一点自己的笔记
- 主要分为三个步骤:寻找对应数字的位数、寻找对应数字、寻找对应数字的最终位
- 步骤一:通过公式 count = 9 * digit * start 来循环寻找
- 步骤二:(n - 1) 是因为要向下取,结合计算机中除法直接向下取整的特性
- 步骤三:(n - 1) 是因为数字的首位为第 0位
- 总的来说,感觉是挺偏数学规律的一道题。。
class Solution {public int findNthDigit(int n) {int digit = 1;long start = 1;long count = 9;while(n > count) {n -= count;digit++;start *= 10;count = digit * start * 9;}long num = start + (n - 1) / digit;return Long.toString(num).charAt((n - 1) % digit) - '0';}
}