輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
暴力破解最為迅速:將所有的數字排列都求出來再比較大小。
對於數字的全排列,在27題已經做過了。
全排列
class
solution
ret=
min(ret,s)
;//比較當前的與之前的大小
return;}
for(
int i=pos;isize()
;i++)}
string printminnumber
(vector<
int> numbers)
};
要完成這一題有幾個需要注意的點:
1、字串是可以像數字一樣直接比較大小的,將數字轉化成字串之後再組合最後再比較大小要比直接數字組合要方便(因為要考慮位置)
2、to_string(number)將數字轉化成字串
3、初始化乙個最大字串用來做第一次比較,這樣就不用將所有排列另外開乙個 空間都存起來了。
下面是我第一次的**,用了乙個vector把所有排列都存起來了。
class
solution
for(
int i = pos; i < num.
size()
; i++)}
string printminnumber
(vector<
int> numbers)
v.push_back
(s);
}sort
(v.begin()
, v.
end())
;return v[0]
;}};
劍指Offer (32)把陣列排成最小的數
題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。實現如下 要將所有元素組合成乙個最小的數 那麼組合的相鄰元素之間都是num1num2的形式 所以使用庫函式的sort將各個元素以str...
劍指offer 32 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。當然這個題可以用暴力求解,那麼複雜度會比較高,在這裡利用stl演算法sort可以自己定義排序的規則,這樣將兩個數拼接之後的數進行比較,比較完之後...
劍指offer32 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。因為要拼接int數字,所以這裡面涉及到int越界問題,所以題目返回string 主要是制定比較演算法來對陣列進行排序,return a b 從大...