179. 最大数——排序

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:“210”

示例 2:
输入:nums = [3,30,34,5,9]
输出:“9534330”

示例 3:
输入:nums = [1]
输出:“1”

示例 4:
输入:nums = [10]
输出:“10”

本质就是n个元素的排序,至于哪个放在前,哪个放在后,只要把字符形式想加进行比较,例如"3"+“30"与"30”+"3"比较,就能得出3放在前。

class Solution {
public:
    string largestNumber(vector<int>& nums) {
        vector<string> vecStr;
        for(auto num : nums){
            vecStr.push_back(to_string(num));
        }
        for(auto i = 0; i != vecStr.size(); ++i){
            for(auto j = i + 1; j != vecStr.size(); ++j){
                string str1 = vecStr[i] + vecStr[j], str2 = vecStr[j] + vecStr[i];
                if(str1 < str2)
                    swap(vecStr[i], vecStr[j]);
            }
        }
        string ans;
        for(auto str : vecStr)
            ans += str;
        if(ans[0] == '0')   //样例中存在[0,0]的情况,这样我们会输出"00",实际应该为"0"
            return "0";
        return ans;
    }
};

Accepted
230/230 cases passed (12 ms)
Your runtime beats 36.26 % of cpp submissions
Your memory usage beats 27.96 % of cpp submissions (11.1 MB)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值