【Leetcode】400. 第 N 位数字

题目的意思可能看不懂,我把示例2放出来,就可以看到题目是什么意思了.
将数字进行分组
- 第一组为1-9, 共 9个数字,共 9*1位数;
- 第二组为10-99, 共 90个数字,共 90*2位数;
- 第二组为100-999,共900个数字,共900*3位数;
- ......
- 第n组为10(n-1)-10n-1,共910(n-1)个数字,共9*10(n-1)n位数;
根据分好的组我们可以确定当前数字为第i组,将问题变成在n在第i组中的位置.
func findNthDigit(n int) int {
// 找到n在第几组
i, temp := 1, 1
for ; n > i*9*temp; i++ {
n -= i * 9 * temp
temp *= 10
}
if n%i == 0 {
return (temp + n/i - 1) % 10
}
// 求出 temp + n/i 的第n%i位数字
num := temp + n/i
pos := i - n%i
return (num % IntPow(10, pos+1)) / IntPow(10, pos)
}
func IntPow(a, b int) int {
res := 1
for b > 0 {
res *= a
b--
}
return res
}

浙公网安备 33010602011771号