牛客题霸 [最大数] C++题解/答案

题目描述

给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大,返回值需要是string类型 否则可能会溢出

题解:

将字符串存入vector中然后sort排序,最后将所以字符串连在一起
但是注意,最前面的字符串不能以0开始,所以先将开头的0筛过

代码:

class Solution {
   
public:
    /** * 最大数 * @param nums int整型vector * @return string字符串 */
    string solve(vector<int>& nums) {
   
        // write code here
        vector<string> str;
        for (int i = 0; i < nums.size(); i++) 
        {
   
            str.push_back(to_string(nums[i]));
        }
        sort(str.begin(), str.end(), cmp);
        string ans = "";
        int i = 0;
        while (i < str.size()-1 && str[i] == "0") 
        {
   
            i++;
        }
        while (i < str.size()) 
        {
   
            ans += str[i];
            i++;
        }
        return ans;
    }
     
    static bool cmp(string a, string b) 
    {
   
        return a+b > b+a;
    }
};