美文网首页
剑指offer 46- 把数组排成最小的数

剑指offer 46- 把数组排成最小的数

作者: 顾子豪 | 来源:发表于2021-05-28 00:16 被阅读0次

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

例如输入数组 [3,32,321],则打印出这 3 个数字能排成的最小数字 321323

样例

输入:[3, 32, 321]

输出:321323

注意:输出数字的格式为字符串
分析:
自定义比较方式
因为是vector,所以排序是sort(a.begin(), a.end())。
mycmp想要放在里面,一定要加static关键字。同时返回类型是bool。

时间复杂度:
sort时间复杂度是n{logn}
排列组合时间复杂度是n!
所以总时间复杂度是n!

class Solution {
public:
    static bool mycmp(int a, int b) {
        string as = to_string(a), bs = to_string(b);
        return as+bs<bs+as;
    }
    string printMinNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end(), mycmp);
        string res;
        for(int x : nums) res += to_string(x);
        return res;
    }
};

相关文章

网友评论

      本文标题:剑指offer 46- 把数组排成最小的数

      本文链接:https://www.haomeiwen.com/subject/xiavjltx.html