劍指offer44 數字序列中某一位的數字

2021-10-02 22:53:46 字數 1623 閱讀 8537

題目描述:在無限的整數序列 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 ...