題目:輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。
分析:對vector容器內的數據進行按照 將a和b轉爲string後 若 a+b<b+a a排在在前 的規則排序,
如 2 21 因爲 212 < 221 所以 排序後爲 21 2 ,排序後數組中的元素按照要求排好序,然後直接按照字符串連接將所有元素連接起來, 另外to_string() 可以將int 轉化爲string。還有需要注意的是,如果cmp函數是成員函數的話,要通過對象來調用,但是如果作爲sort的第三個參數直接傳遞的話,要將cmp函數定義爲static成員函數,它不需要通過對象來調用。
static bool cmp(int a, int b)
{
string s1;
string s2;
//s1+s2(拼接)
s1+=to_string(a);
s1+=to_string(b);
//s2+s1(拼接)
s2+=to_string(b);
s2+=to_string(a);
return s1<s2;//排升序
}
string PrintMinNumber(vector<int> numbers) {
int len=numbers.size();
string ret;
if(len<=0)
return ret;
//排序(按照拼接起來從小到大)
sort(numbers.begin(), numbers.end(), cmp);
//輸入拼接後的值(已經按照升序拍好了)
for(int i=0;i<len;i++)
{
ret+=to_string(numbers[i]);
}
return ret;
}