【劍指Offer】把陣列排成最小的數
阿新 • • 發佈:2018-12-12
題目描述
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
分析:拼接乘最小數字,不能是比較數字的大小,例如:3<32<321,但是結果是由321 32 3拼接得到。所以應該比較拼接後的大小。 在此基礎上,可以考慮減小空間複雜度,如果卡記憶體,可能會爆。
class Solution { public: static bool cmp(const string& s1,const string& s2) { string a=s1+s2; string b=s2+s1; return a<b; } string PrintMinNumber(vector<int> numbers) { string res=""; if(numbers.size()<=0) return res; vector<string>sNum; for(auto x:numbers) { stringstream ss; ss<<x; sNum.push_back(ss.str()); } sort(sNum.begin(), sNum.end(), cmp); for(auto str:sNum) { res.append(str); } return res; } };