179. 最大数

题目描述:

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

记录目的:这个题需要对nums进行排序,但是这里排序时的比较函数有些小技巧,在这里进行记录。

class Solution {
private:
    bool myCmp(int a, int b) {
        string strA = to_string(a);
        string strB = to_string(b);

        string A = strA + strB;
        string B = strB + strA;
        for (int i = 0; i < A.size(); i++) {
            if (A[i] == B[i]) {
                continue;
            }

            return A[i] > B[i];
        }

        return true;
    }

    void sort(vector<int> &nums) {
        for (int i = 0; i < nums.size(); i++) {
            for (int j = 0; j < nums.size() - i - 1; j++) {
                if (!myCmp(nums[j], nums[j + 1])) {
                    swap(nums[j], nums[j + 1]);
                }
            }
        }
    }
public:
    string largestNumber(vector<int>& nums) {
        // sort(nums.begin(), nums.end(), myCmp);
        sort(nums);
        string ans;
        for (int i = 0; i < nums.size(); i++) {
            ans += to_string(nums[i]);
        }
        return ans[0] == '0' ? to_string(0) : ans;
    }
};

  

由于在排序时,比较函数是将nums中的两个数组成一个新的数时,越大越好。因此,这里将两个元素转string,并前后并接。

例如:a = '11', b = '22',则并接后的两个字符串分别是"1122"和"2211",然后比较这两个数的大小即可。

疑问点:使用系统的c++自带的sort函数时,在leetcode上调试时出现了“堆溢出”,在本地用CLion调试又没有问题。

在百度上搜索一篇博文,“https://blog.csdn.net/u010968350/article/details/79670143”,其中写道:,按照此修改后,果然可以运行了

 

posted @ 2022-01-10 22:08  太极者  阅读(136)  评论(0)    收藏  举报