美文网首页
剑指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