面试题45

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

示例 1:

输入: [10,2]
输出: "102"

示例 2:

输入: [3,30,34,5,9]
输出: "3033459"

提示:

  • 0 < nums.length <= 100

说明:

  • 输出结果可能非常大,所以你需要返回一个字符串而不是整数

  • 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

Solutions

  1. sort

class Solution {
public:
    string minNumber(vector<int>& nums) {
        vector<string> vs(nums.size());
        for (int i = 0; i < nums.size(); i++)
            vs[i] = to_string(nums[i]);
        sort(vs.begin(), vs.end(), [](auto & s1, auto & s2) {
            return (s1 + s2) < (s2 + s1);
        });

        string res;
        for (auto & s : vs)
            res += s;

        return res;
    }
};

Last updated

Was this helpful?