给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数
样例
给出样例 [1, 20, 23, 4, 8],返回组合最大的整数为8423201
注意
最后的结果可能很大,所以我们返回一个字符串来代替这个整数
分析:这个其实是一个排序问题,当然首字母越大肯定应该排在前面,注意【20,201】【20,203】两种情况,第一种201应该在20后面,第二种203应该在20前面。
代码:
bool cmp(string s1,string s2) { int i=0; while(i<min(s1.length(),s2.length())) { if(s1[i]>s2[i]) return true; else if(s1[i]<s2[i]) return false; i++; } if(i==s1.length()) return s2[i]>s2[0]?false:true; if(i==s2.length()) return s1[i]>s1[0]?true:false; } class Solution { public: /** *@param num: A list of non negative integers *@return: A string */ string toString(int x) { if(x==0) return "0"; string ret = ""; while(x>0) { char c = x%10+'0'; ret = c+ret; x/=10; } return ret; } string largestNumber(vector<int> &num) { // write your code here int sum = accumulate(num.begin(),num.end(),0); if(sum==0) return "0"; vector<string> nums; for(int i=0;i<num.size();i++) { nums.push_back(toString(num[i])); } sort(nums.begin(),nums.end(),cmp); string ret = ""; for(int i=0;i<nums.size();i++) ret+=nums[i]; return ret; } };
时间: 2024-10-12 21:29:22