題目描述
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。
/*
* 解題思路:
* 先將整型數組轉換成String數組,然後將String數組排序,最後將排好序的字符串數組拼接出來。關鍵就是制定排序規則。
* 排序規則如下:
* 若ab > ba 則 a > b,
* 若ab < ba 則 a < b,
* 若ab = ba 則 a = b;
* 解釋說明:
* 比如 "3" < "31"但是 "331" > "313",所以要將二者拼接起來進行比較
*/
class Solution {
public:
static bool compare(const string& s1,const string& s2)
{
string comb_str1=s1+s2;
string comb_str2=s2+s1;
return comb_str1<comb_str2;
}
string PrintMinNumber(vector<int> numbers) {
string res;
int len=numbers.size();
if(len<=0) return res;
vector<string> vstr;
for(int i=0;i<len;i++)
vstr.push_back(to_string(numbers[i]));
sort(vstr.begin(),vstr.end(),compare);
int vlen=vstr.size();
for(int i=0;i<vlen;i++)
res+=vstr[i];
return res;
}
};