1. 程式人生 > 實用技巧 >劍指 Offer 45. 把陣列排成最小的數

劍指 Offer 45. 把陣列排成最小的數

劍指 Offer 45. 把陣列排成最小的數

解題思路

將數字轉換為字串,按照字典序排序所有字串
排序函式

str1.compare(str2)
> 0 str1 > str2
< 0 str1 < str2
= 0 str1 = str2

比如“30”和“9”,“300”和“30”
對於每一對數字
拼接“30”+“9”=“309”,和“9”+“30”=“930”,使用string的compare可以很方便的按照字典序比較。“309”<"930"
同樣的:
“30030”<“30300”

程式碼

class Solution {
public:
    static bool compare1(int n1,int n2)
    {
        stringstream ss;
        string str1,str2;
        ss<<n1;
        ss>>str1;
        ss.clear();
        ss<<n2;
        ss>>str2;

        string cmp1,cmp2;
        cmp1=str1+str2;
        cmp2=str2+str1;
        return cmp1.compare(cmp2)<0;
    }
    string minNumber(vector<int>& nums) {
        string res="";

        sort(nums.begin(),nums.end(),compare1);
        for(int i=0;i<nums.size();i++)
        {
            stringstream ss;
            ss<<nums[i];
            string temp;
            ss>>temp;
            res+=temp;
        }
        return res;
    }
};

結果