leetcode/largest-number

Largest Number       Total Accepted: 5791                               Total Submissions: 39124 

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

https://oj.leetcode.com/problems/largest-number/

分析:题目实质是让重新定义一个符合特殊要求的比较函数


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;
        }
    }
};


你可能感兴趣的:(leetcode/largest-number)