劍指 面試題44 數字序列中某一位的數字

2021-10-05 01:26:20 字數 2129 閱讀 3368

題目數字以0123456789101112131415…的格式序列化到乙個字串行中。在這個序列中,第5位(從下標0開始計數)是5,第13位是1,第19位是4,等等。

請寫乙個函式,求任意第n位對應的數字。

思路參考leetcode題解:

對於第n位對應的數字,令這個數字對應的數為target,然後分三步進行:

比如輸入的n是365:

(1)算出digit=3:n

=365−0

−90×2

=176

n=365-0-90×2=176

n=365−

0−90

×2=1

76,即n是三位數中的第176個數字

(2)設目標所在的數為number,計算得到num

ber=

100+

176/3=

158number=100+176/3=158

number

=100

+176

/3=1

58,而idx表示返回值在number中的位置,idx=0表示是number的最後一位

(3)idx

=n%d

igit

=176%3

=2idx = n %digit = 176%3 =2

idx=n%

digi

t=17

6%3=

2,即目標數字是158的第二位5。

c++

class

solution

// 計算真實代表的數字number

int idx = n % digit;

if(idx==0)

//此時為number的最後一位,number是digit位數,idx=digit

idx = digit;

long number =1;

for(

int i=

1; i

++i)

number*=10

; number +

=(idx==digit)

? n/digit-

1:n/digit;

//找到res

for(

int i=idx; i

++i)

number/=10

;return number%10;}};

python

class

solution

:def

findnthdigit

(self, n:

int)

->

int:

# 先判斷target屬於幾位數, 用digit表示

base =

9 digit =

1while n-base*digit>0:

n -= base*digit

base *=

10 digit +=

1# 計算目標數字,此時n表示digit位數的第n個數字

idx = n % digit

if idx==0:

idx = digit

number =

1for i in

range(1

, digit)

: number *=

10if idx == digit:

number += n//digit -

1else

: number += n//digit

# 找到target中對應的數字

for i in

range

(idx, digit)

: number //=

10return number %

10

劍指offer 面試題44 數字序列中某一位的數字

問題 在無限的整數序列 1,2,3,4,5,6,7,8,9,10,11,中找到第 n 個數字。輸入 n 輸出 數字 思路 判斷是幾位數 確定對應著的數值target 確定返回值是target中的哪個位 class solution int beginnumber int digits int dig...

面試題44 數字序列中某一位的數字

題目 數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從0開始計數 是5,第13位是1,第19位是4,等等。請寫乙個函式求任意位對應的數字。code include include include include include include ...

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

題目 數字按照0123456789101112131415161718192021 的順序排列。第5位 從0開始計數 為5,第13位為1,第19位為4 求任意第n位對應的數字。思路 從 0 9的10個數是1位數 10 99是兩位數 100 999是三位數 除了1位數之外 其他n位數 佔據的順序排列的...