剑指 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”

注意
使用algorithm自带的sort函数,自定义的compare1函数要定义成静态函数
sort(numbers.begin(), numbers.end(), compare1)中第三个参数是一个函数指针,非静态成员函数指针和普通函数指针是有区别的。
原理参考> https://blog.csdn.net/u010982765/article/details/79021426

代码

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;
    }
};

结果

posted @ 2020-10-25 14:53  韩天尊  阅读(57)  评论(0)    收藏  举报