31、把陣列排成最小的數
阿新 • • 發佈:2019-01-01
題目描述:
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
解題思路:
陣列中所有的數拼接後有可能會超過整數的範圍,因此本題必須要使用字串來處理。
要對3,32 ,321 排序,不能直接比較32,3的大小,應該比較323,332的大小,即,3,32的大小應該有323,332的大小來確定。因此3比32大,3應該在32後面,32和321比較時,32321>32132,因此32>321,32在321後面,3,32,321由小到大排序為,321,32,3,組成的最小數為:321323
Demo:
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
vector<string> vec_str;
for(auto num : numbers)
{
vec_str.push_back(to_string(num));
}
// 重新定義排序規則
sort(begin(vec_str), end(vec_str), [] (const string &s1, const string & s2) -> bool
{
return s1 + s2 < s2 + s1;
});
string output = "";
for (const auto s : vec_str)
output += s;
return output;
}
};