无限长数的第 n 位
描述
有数列 1 , 2 , 3 , … ,给定一个正整数 n 返回这个数的第 n 位
样例
样例11
2输入: 3
输出: 3
样例21
2输入: 11
输出: 0 (注意第十一位是 10 的个位)
思路
最开始想枚举 2 ^ 31 发现循环时间太长了。 后发现数字是按照 9 * 10 ^ iter * (iter+1)增长的。于是可以将一个位数缩小到一个范围,能解决小数据问题,题目直接给了一个数据
1000,0000 emmm, 时间还是很久,之后发现还可以继续缩小,想象这样一个场景, 你有 2 个苹果, 要放到容积为 2 的抽屉里面,抽屉有序,抽屉里面的空间也有序,放在哪一个位置呢 ? 2 / 2 = 1 要放到第一个抽屉,2 % 2 = 0,放在这个抽屉的最后一个位置,可以想象一下一个二维数组的排列,求余为 0 就是最后一个数据啦!😄,所以 3 个苹果就是放在第一个抽屉的末尾再加上一个位置,也就是第二个抽屉的第一个。这也就是代码后半部分做的工作。
放一张想不清楚分苹果的人的结果图
代码
1 | class Solution { |