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

2021-10-23 11:43:45 字數 987 閱讀 9709

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

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

我倒在了在這個0上。

思路: a[i]代表i位所有數的位數之和。

s[i]代表a的字首和。

po[i]代表i位數的開始的數字,例如個位數開始的數字是0,,3位數開始的數字是100

輸入n,判斷n處於幾位數的區間內。

pos = lower_bound(s+1,s+i+1,(long long)n + 1) - s;

n在pos位數所處的區間內。 

然後n減去s[pos-1],相當於在相同位數的數字列裡面找第n位

這樣就好找了,k=n/pos 如果整除,則n是第k個數的最後一位

如果不整除,km=n%pos    則n是第k+1個數的第km位

m = po[pos]+ k    ,m代表n所在的那個pos位的數。

轉化為字串  返回第km位即可                                   

class solution 

long long po[15];

po[1] = 0;

po[2] = 10;

for(i = 3; i < 10; i++)

int pos = lower_bound(s + 1, s + i + 1, (long long)n+1) - s;

n -= s[pos - 1];

int k = n / pos;

int km = n % pos;

int m = po[pos] + k;

string ss = to_string(m);

char c = ss[km];

int ans = c - '0';

return ans;

}};

劍指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 數字序列中某一位的數字

題目描述 在無限的整數序列 1,2,3,4,5,6,7,8,9,10,11,中找到第 n 個數字。數字以0123456789101112131415 的格式序列化到乙個字串行中。在這個序列中,第5位 從0開始計數,即從第0位開始 是5,第13位是1,第19位是4,等等。請寫乙個函式,求任意第n位對應...

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

思路 求該數字所在的資料範圍,即屬於幾位數 求該數字的具體數值,是多少 找出所求是數字中的第幾位,求出數字中對應的那一位 param n return var findnthdigit function n let digit 1,count 10,numcount 10 求出是digit位數 wh...