题解 | #最大数#
最大数
https://www.nowcoder.com/practice/fc897457408f4bbe9d3f87588f497729
#include <algorithm>
#include <cstddef>
#include <string>
class Solution {
public:
static bool cmp(int a, int b) {
string str1 = to_string(a);
string str2 = to_string(b);
cout<<str1 <<" " <<str2<<endl;
int len1 = str1.size();
int len2 = str2.size();
if (len1 == len2) return str1 >str2;//这个的意思表示str1大就排在前面
else if (len1 > len2) {
string temp = str1.substr(0, len2);
string temp2 = str1.substr(len2, str1.size());
if (temp == str2&& temp2 < str2 ) {
return false;//也就是让str2放在前面
}
} else {
string temp = str2.substr(0, len1);
string temp2 = str2.substr(len1, str2.size());
if (temp == str1 && temp2 < str1) {
return true;//也就是让str1在前面
}
}
return str1 > str2;
}
string solve(vector<int>& nums) {
// write code here
//得自定义排序方法,如果位数相同则字典序大的就大,当位数不同,则位数少的与位数大的前部分相同,则返回位数低的,若位数低的与位数高的前部分不相同就返回字典序(这里的字典序指的是左往右进行比较)
int n = nums.size();
sort(nums.begin(), nums.end(), cmp);
string ans;
for (int i = 0; i < n; i++) ans += to_string(nums[i]);
int i = 0;
while(ans[i] == '0'&& i< n - 1)i++;
ans = ans.substr(i , ans.size());
return ans;
}
};

