【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
}

posted @ 2021-12-19 22:23  TICSMC  阅读(20)  评论(0)    收藏  举报