class Solution {
private:
bool cmp(int a,int b){
stringstream ssa, ssb;
string sa,sb;
ssa << a << b;
ssa >> sa;
ssb << b << a;
ssb >> sb;
return sa > sb;
}
void quickSort(vector<int> &num){
stack<pair<int,int>> stk;
if(num.size() - 1 > 0){
stk.push(make_pair(0, num.size() - 1));
}
while(!stk.empty()){
pair<int,int> pairs = stk.top();
stk.pop();
int index = rand() % (pairs.second - pairs.first + 1) + pairs.first, small = pairs.first - 1;
swap(num[index],num[pairs.second]);
for(int i = pairs.first; i < pairs.second; i++){
if(cmp(num[i],num[pairs.second])){
swap(num[i],num[++small]);
}
}
swap(num[pairs.second],num[++small]);
if(pairs.first < small - 1){
stk.push(make_pair(pairs.first, small - 1));
}
if(small + 1 < pairs.second){
stk.push(make_pair(small + 1, pairs.second));
}
}
}
bool allZero(vector<int> &num){
for(auto val:num){
if(val){
return false;
}
}
return true;
}
public:
string largestNumber(vector<int> &num) {
if(allZero(num)){
return "0";
}
quickSort(num);
stringstream ansStream;
string ans;
bool nonzeroProceeding = false;
for(auto val:num){
ansStream << val;
}
ansStream >> ans;
return ans;
}
};
Leetcode Largest Number
最新推荐文章于 2019-09-25 15:40:24 发布