剑指 Offer 44. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数,求任意第n位对应的数字。
解题思路 1
- 假设序列化的时候,每个数字根据最大位数自动以 0 0 0 补全,则所有的数字位数相同(假设均为 i i i ),此时下标为 n n n 的数字为 n / / i n // i n//i 的第 n % i n \% i n%i 位数字。
- 若数字的最大位数为 i i i ,则n的最大取值应该是 i ∗ p o w ( 10 , i ) i * pow(10,i) i∗pow(10,i)
class Solution:
def findNthDigit(self, n: int) -> int:
i,count = 1,10
# i表示数字位数,count表示最大位数为i的数字个数 = 10 ** i
while i * count < n:
n += count
i += 1
count *= 10
return int(str(n//i)[n % i])
解题思路 2
class Solution:
def findNthDigit(self, n: int) -> int:
# i表示数字位数,count表示i位数的总个数,start表示第一个i位数的值
i,count,start = 1,10,0
# i * count 所有i位数格式序列化后的的最大长度
while i * count < n:
n -= count * i
i += 1
start += count
count = start * 9
return int(str(n//i + start)[n % i])