題目描述:在無限的整數序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 個數字。
數字以0123456789101112131415…的格式序列化到乙個字串行中。在這個序列中,第5位(從0開始計數,即從第0位開始)是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應的數字。
#方法1:直觀方法,每列舉乙個數字的時候,求出該數字是幾位數,並把該數字的位數和前面所有數字的位數累加,
#如果位數之和《n,則繼續列舉下乙個數字,當累加的位數》=n,那第n位數字一定在這個數字裡,我們再從該數字中找出對應的那一位。
#求正正數的位數
def countdigit(n):
if n==0:
return 1
c=0while n:
n=n//10
c+=1
return c
def digitatindex(n):
if n<=9:
return n
c=0#c代表位數之和
for i in range(n):
c+=countdigit(i)
if c>=n:#當位數和》n時,
return str(i)[n-c]
digitatindex(1001)
import numpy as np
#方法2:
#m位數字共有幾個數字
def countofintegers(digit):
if digit==1:
return 10
return 9*np.power(10,digit-1)
#m位數字的第一位數字,比如2位數字的第一位數字就是10,第乙個三位數就是100
def beginnumber(digit):
if digit==1:
return 0
return np.power(10,digit-1)
#當我們知道要找的那一位數字位於某m位數字之中後,就可以用如下函式找出那一位數字:
def digitatindex2(index,digit):
number=beginnumber(digit)+index//digit
# indexfromright=digits-index%digit
# for i in range(1,indexfromright):
# number/=10
# return number%10
remainder=index%digit
return str(number)[remainder]
def digitatindex(index):
if index<0:
return -1
digit=1
while true:
number=countofintegers(digit)
if indexreturn digitatindex2(index,digit)
index-=digit*number
digit += 1
digitatindex(1001)
劍指offer 44 數字序列中某一位的數字
這種數學題好難 參考 1 理解題意 以第15位數字2為例 2隸屬與12,兩位數,位於12從左側以0號開始下標為1的位置 步驟1 首先確定該數字是屬於幾位數的 如果是一位數,n 9 如果是兩位數,n 9 90 2 189 說明是兩位數。步驟2 確定該數字屬於哪個數。10 15 10 2 12。步驟3 ...
劍指offer44 數字序列中某一位的數字
思路 求該數字所在的資料範圍,即屬於幾位數 求該數字的具體數值,是多少 找出所求是數字中的第幾位,求出數字中對應的那一位 param n return var findnthdigit function n let digit 1,count 10,numcount 10 求出是digit位數 wh...
劍指 Offer 44 數字序列中某一位的數字
劍指 offer 44.數字序列中某一位的數字 數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從下標0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應的數字。示例 1 輸入 n 3 輸出 3 示例 2 輸入 n ...