文章目录
- 完整代码:
题目描述:
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。
示例 1:
输入:n = 3
输出:3
示例 2:
输入:n = 11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分。
思路分析:
这道题暴力过不去啊~ 我上来直接用的暴力,从0开始数,这道题的数量级非常大1 <= n <= 231 - 1
暴力直接超时了。
在使用暴力法的时候,已经有优化的思路。
0-9都是一位数。总共有 19 = 9位数
10-99都是两位数。 总共有 290 = 180位数
100-999都是三位数,总共有 3*900 = 2700位数
所以我们可以根据所给出的n找到这个n是属于几位数。
比如给的n是300, 则 300-180-9 = 111。
所以所找的位数一定是三位数。因为一位数的末尾是9位,二位数的末尾是9+180位。
因为定位到三位数,三位数每一位都是三位。所以 111/3 = 37
直接定位到了是三位数第37个数,由于没有余数,所以我们要找到的是 137里的第0位,实际上就是136的最后一位数 6。
完整代码: