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”,其中写道:
,按照此修改后,果然可以运行了

浙公网安备 33010602011771号