把數組排成最小的數(22)

題目

【輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323】


1、分析

  • 在進行拼接時要注意,把兩個 int 型的整數拼接起來的數字可能會超出 int 型數字所能表達的範圍,從而導致數字溢出。因此可以將數字轉換成字符串,這樣能夠便捷安全的解決數據超出範圍等問題。
  • 數字a 和數字b,拼接起來若 ab<ba 則定義數字a 小於數字b,將其作爲一種新的規則。

2、代碼

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        int len=numbers.size();
        if(len<=0)
            return res;
        // 按照指定的規則來進行排序
        sort(numbers.begin(),numbers.end(),cmp);
        for(auto &i:numbers)
        {
            res+=to_string(i);
        }
        return res;
    }
    // 指定排序的規則
   static bool cmp(int num1,int num2)
    {
        string str1=to_string(num1)+to_string(num2);
        string str2=to_string(num2)+to_string(num1);
        return str1<str2;
    }
private:
    string res;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章