輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
思路1:
根據全排列,將三個數字的全排列全寫出來,然後比較大小,這種辦法在數比較多時,效率不高。
思路2:
先比較前兩個數字m和n排列的大小:mn和nm
注意:但是需要考慮的乙個潛在問題就是把m和n拼接起來以後的數字用int型可能會溢位。解決這樣的大數的問題就是將數字轉成字串
由於mn和nm的位數肯定是相同的,因此比較他們的大小只需要按照字串的大小比較規則即可。
利用sort函式,將數字按照**中的cmp規則排列
**如下:
class solution {
public:
string printminnumber(vectornumbers) {
string answer;
if(numbers.size()==0)
return answer;
sort(numbers.begin(),numbers.end(),cmp);//自定義函式cmp,使numbers中的資料按照cmp的方式排列
for(int i=0;isort中的cmp函式詳解:
要點:sort函式根據cmp函式的返回值,對comp函式的兩個引數排序。
如果cmp返回true,排序為「引數1」「引數2」,否則排序為「引數2」「引數1」。
想要公升序排列,則return parameter1parameter2
劍指Offer 45 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例 輸入陣列,列印321323。排列出所有的組合,比較出最小的,輸出。時間複雜度 o n 空間複雜度 o n 考察最小組合的形式,遵從下面的規律 1 首位小的靠前 2 首位相同,次位小的靠前 3 位數少的靠前...
把陣列排成最小的數(劍指offer 45)
輸入乙個正整數陣列,把陣列裡所有的數拼接為乙個數,列印出能拼接出的所有數字中最小的乙個。比如輸入 輸出 321323.這道題其實是希望我們能找到乙個排序規則,陣列根據這個排序規則排列後能排成乙個最小的數。要確定排序規則,就要比較兩個數字,也就是給出兩個數字m n,我們需要確定乙個規則判斷m和n哪個應...
劍指offer 45 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。直接遍歷所有可能的結果,找出最小值。具體流程是先用二維陣列儲存所有可能的排列結果,然後遍歷所有結果找出最小值,最後把這個最小值轉成string即...