列表

详情


NC111. 最大数

描述

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

数据范围:
进阶:时间复杂度 ,空间复杂度:

示例1

输入:

[30,1]

输出:

"301"

示例2

输入:

[2,20,23,4,8]

输出:

"8423220"

示例3

输入:

[2]

输出:

"2"

示例4

输入:

[10]

输出:

"10"

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2021-09-15

bool cmp(const string& a, const string& b) {
    return a + b > b + a;
}

class Solution {
public:
    /**
     * 最大数
     * @param nums int整型vector 
     * @return string字符串
     */
    
    string solve(vector<int>& nums) {
        // write code here
        if (nums.size() == 0)
            return "";
        
        vector<string> strNums;
        for (auto num : nums) {
            strNums.emplace_back(to_string(num));
        }
        sort(strNums.begin(), strNums.end(), cmp);
        if (strNums[0] == "0")
            return "0";
        string res;
        for (auto str : strNums) {
            res += str;
        }
        return res;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2021-09-14

class Solution {
public:
    /**
     * 最大数
     * @param nums int整型vector 
     * @return string字符串
     */
    string solve(vector<int>& nums) {
        // write code here
        
        vector<std::string> nums_str;
        for (int i = 0; i < nums.size(); i++)
        {
            nums_str.push_back(std::to_string(nums[i]));
        }
        
        sort(nums_str.begin(), nums_str.end(), cmp);
        
        std::string res;
        if (nums_str[0] != "0"){
            res = nums_str[0];
        }
        else{
            return "0";
        }
        
        for (int i = 1; i < nums_str.size(); i++)
        {
//             if (nums_str[i] == "0" && nums_str[i-1] == "0")
//             {
//                 continue;
//             }
            res += nums_str[i];
        }
        if (res.empty())
        {
            return "0";
        }
        return res;

        // 全排列
        
    }
            
    static bool cmp(std::string s1, std::string s2)
    {
        std::string s12 = s1 + s2;
        std::string s21 = s2 + s1;
        return s12 > s21;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 396KB, 提交时间: 2021-08-29

class Solution {
public:
    /**
     * 最大数
     * @param nums int整型vector 
     * @return string字符串
     */
    static bool cmp(string a,string b){
        return a+b > b+a;
    }

        string solve(vector<int>& nums) {
        // write code here
            vector<string> ans;
            for(int i= 0;i<nums.size();i++)
            {
                ans.push_back(to_string(nums[i]));
            }
            sort(ans.begin(), ans.end(),cmp);
            if(ans[0] == "0")
                return "0";
            string str;
            for(int i= 0;i<ans.size();i++)
            {
                str = str+ans[i];
            }
            return str;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 400KB, 提交时间: 2021-09-08

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

C++ 解法, 执行用时: 2ms, 内存消耗: 404KB, 提交时间: 2021-09-12

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

上一题