这题有很好的解法,也有自己想出来的解法。
完美解法:
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> strVec;
for (int num : nums)
strVec.push_back(to_string(num));
sort(strVec.begin(), strVec.end(), sortHelper);
stringstream ss;
for (string& str : strVec)
ss << str;
string retStr = ss.str();
int idx = 0;
while (idx < retStr.size() && retStr[idx] == '0')
++idx;
return idx == retStr.size()? "0" : retStr.substr(idx);
}
private:
static bool sortHelper(string& num1, string& num2) {
return num1+num2 > num2+num1;
}
};
自己的解法:
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> strVec;
for (int num : nums)
strVec.push_back(to_string(num));
sort(strVec.begin(), strVec.end(), sortHelper);
stringstream ss;
for (string& str : strVec)
ss << str;
string retStr = ss.str();
int idx = 0;
while (idx < retStr.size() && retStr[idx] == '0')
++idx;
return idx == retStr.size()? "0" : retStr.substr(idx);
}
private:
static bool sortHelper(string num1, string num2) {
int idx1 = 0, idx2 = 0;
while (idx1 < num1.size() && idx2 < num2.size() && num1[idx1] == num2[idx2]) {
++idx1;
++idx2;
}
if (idx1 < num1.size() && idx2 < num2.size())
return num1[idx1] > num2[idx2];
if (idx1 == num1.size() && idx2 == num2.size())
return true;
if (idx1 == num1.size())
return sortHelper(num1, num2.substr(idx2));
else
return sortHelper(num1.substr(idx1), num2);
}
};
第一次写在sorthelper当中调用自身的。虽然这份代码有一个例子没有通过,但是示例都通过了。之后可以再修改修改