- class Solution {
- public:
- string largestNumber(vector<int> &num) {
- //sort
- int j = 1;
- string ss;
- int ssm=0;
- //只有一个元素,直接返回
- if (num.size() == 1){
- return to_string(num[0]);
- }
- vector<int>::iterator iterr = num.begin();
- //插入排序,从大到小
- for (; j < num.size(); j++)
- {
- int key = num[j];
- int i = j - 1;
- while (i >= 0 && (!Compare(num[i], key)))
- {
- num[i + 1] = num[i];
- i--;
- }
- num[i + 1] = key;
- }
- //将元素组合成字符串输出。如果元素全为零,则直接输出“0”
- while (iterr != num.end()){
- ssm=ssm+(*iterr);
- ss = ss + to_string(*iterr);
- iterr++;
- }
- if(ssm==0){
- return "0";
- }else{
- return ss;
- }
- }
- //重新定义比较函数
- bool Compare(int int1, int int2){
- if (int1 == int2){
- return true;
- }
- vector<int> num1;
- //将int1按位拆解,置于vector中,个,十,百,千等顺序,用于比较
- num1.push_back(int1 % 10);
- while (int1 / 10){
- int1 = int1 / 10;
- num1.push_back(int1 % 10);
- }
- vector<int> num2;
- num2.push_back(int2 % 10);
- while (int2 / 10){
- int2 = int2 / 10;
- num2.push_back(int2 % 10);
- }
- vector<int>::iterator iter1 = num1.end();
- vector<int>::iterator iter2 = num2.end();
- iter1--;
- iter2--;
- //从最高位开始比较,如果该位不等,则返回结果;如果相等,等降低至下一位。
- //如果一个迭代器到头了,为了继续比较,将到头的迭代器重新归位
- while (*iter1 == *iter2){
- if (iter1 == num1.begin()){
- iter1 = num1.end();
- iter1--;
- iter2--;
- }
- else if (iter2 == num2.begin()){
- iter2 = num2.end();
- iter2--;
- iter1--;
- }
- else{
- iter1--;
- iter2--;
- }
- }
- if (*iter1>*iter2){
- return true;
- }
- else{
- return false;
- }
- }
- };
- //该片段来自于http://www.codesnippet.cn/detail/1304201512215.html
来源: http://www.codesnippet.cn/detail/1304201512215.html