[排序]leetcode179:最大数(medium)

标签: leetcode刷题  # 排序

题目:
在这里插入图片描述
题解:

  • 题解1:STL算法,对数组的元素进行排序,排序的顺序为二者拼接起来大的排在前面
  • 题解2:与题解1算法思路一样的,不过没有题解1秀,题解1全程STL算法

代码如下:

class Solution {
public:
    //题解1:STL算法
    string largestNumber_1(vector<int>& nums) {
        //1、数组内的元素全为0,直接返回0
        if(all_of(nums.begin(),nums.end(),[](int x){return x==0;})){
            return "0";
        }
        vector<string> strNums(nums.size());

        //2、将nums中的int值全部转换为string
        std::transform(nums.begin(),nums.end(),strNums.begin(),[](int x){
            return to_string(x);
        });

        //3、将strNums中元素进行排序,比如10、2在排序之后变为2、10,因为210比102大
        sort(strNums.begin(),strNums.end(),[](const string& x,const string& y){
            return x+y>y+x;
        });

        //4、将strNums中的string连接起来
        return accumulate(strNums.begin(),strNums.end(),string());
    }

    //题解2:与题解1算法思路一样的,都是利用string相加然后进行排序
    string largestNumber(vector<int>& nums)
    {
        //1、对nums中元素进行排序
	    sort(nums.rbegin(), nums.rend(), [](const int& a, const int& b)
	    {
		    string sa = to_string(a);
		    string sb = to_string(b);
		    return sa + sb < sb + sa;
	    });
	    string ans;
        //2、遍历nums将其转换为string
	    for (auto n : nums)
	    {
		    ans = (ans == "0") ? to_string(n) : ans + to_string(n);
	    }
	    return ans;
    }
};
版权声明:本文为qq_43152052原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43152052/article/details/103513007