400. 第 N 位数字
- 400. 第 N 位数字
- 题解
- 官方
400. 第 N 位数字
难度 中等
给你一个整数 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 的一部分。
提示:
- 1 <= n <= 231 - 1
- 第
n
位上的数字是按计数单位(digit)从前往后数的第n
个数,参见示例 2。
题解
官方
方法二:直接计算
已知 x 位数共有9×10x−1个,所有 x 位数的位数之和是9×10 x−1。使用 d 和 count 分别表示当前遍历到的位数和当前位数下的所有整数的位数之和,初始时 d=1,count=9。每次将 n 减去 d d×count,然后将 d 加 1,将 count 乘以 10,直到 n≤d×count,此时的 d 是目标数字所在整数的位数,n 是所有 d 位数中从第一位到目标数字的位数。
为了方便计算目标数字,使用目标数字在所有 d 位数中的下标进行计算,下标从 0 开始计数。令
index=n−1,则 index 即为目标数字在所有 d 位数中的下标,index 的最小可能取值是 0。
得到下标index 之后,即可使用方法一的做法得到无限整数序列中的第 n 位数字。
作者:LeetCode-Solution