數字以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...