劍指offer刷題————把數組排成最小的數

問題重述: 

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

思路解析:

首先,因爲拼接起來的數可能會超出範圍,因此用字符串來存儲。

我們需要一個最小的數,細想一下可知,如果有兩個字符串a,b
如果a + b < b + a, 顯然我們希望a排在b的前面,因爲a排在前面可以使結果更小。於是我們就自定義排序規則,使得vector中字符串都滿足如上規則,那麼最後的結果肯定是最小的。

代碼實現:

class Solution {
public:
    string PrintMinNumber(vector<int> nums) {
        vector<string> str;
        for (int val : nums) str.push_back(to_string(val));
        sort(str.begin(), str.end(), [](string a, string b) {
            return a + b < b + a;
        });
        string ret = "";
        for (string s : str) ret += s;
        return ret;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章