劍指offer刷題44 45

2021-10-03 13:29:27 字數 1700 閱讀 2263

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

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

找規律,解釋都在注釋中,多看幾遍就明白了。

**如下:

class solution 

return res[res.size() - index];

}int findnthdigit(int n)

// 統計多少位

// 一位數,有10個比較特殊,佔10位

// 二位數,有10-99共90個,佔90*2=180位

// 三位數,有100-999,共900個,佔900*3=2700位

// i位數,有9*pow(10, i-1)個,佔9*pow(10, i-1)*i位

// 這個值設為int會越界,需要特別注意下

long long cummulate = 10;

int pre = 0;

int i;

for (i = 1; ; i++)

}// i此時的含義是到i位數的時候,可以包括第n個位

// i位數的第乙個值

int start = pow(10, i);

int offset;

// offset偏移記錄了當前i位數中共有多少位(扣除前面的)

if (i == 1) else

// i位數中的第幾個數

int index = offset / (i + 1);

// 一共有多少位(offset從零開始)

int totalnumbits = offset + 1;

// 第n位數就存在於end中

int end = start + index;

// 找到是end中的第幾位數

int a = totalnumbits - index * (i + 1);

// 利用函式找到這個位

int ans = getbit(end, a);

return ans;

}};

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。

定義乙個規則,對拼接後的字串進行比較。

排序規則如下:

若ab > ba 則 a 大於 b,

若ab < ba 則 a 小於 b,

若ab = ba 則 a 等於 b;

根據上述規則,我們需要先將數字轉換成字串再進行比較,因為需要串起來進行比較。比較完之後,按順序輸出即可。

**如下:

class solution 

sort(numbers.begin(), numbers.end(), cmp);

string res;

for(int i = 0; i < length; i++)

return res;

}private:

// 公升序排序

static bool cmp(int a, int b)

};

劍指offer刷題

面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...

劍指offer刷題

原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...

劍指offer刷題 2

思路 如果從前往後進行遍歷,那麼每次找到乙個空格,則需要新增兩個位元組來進行替換,我們採用先對字串進行遍歷,查詢字串中的空格的個數,然後對新的字串進行長度的計算,然後從後往前進行替換,每遇到乙個空字元,然後進行替換。class solution int oldnumber 0 int numbers...