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

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

  • 题解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;
    }
};
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页