1. 程式人生 > >[lintcode]最大數 Largest Number

[lintcode]最大數 Largest Number

給出一組非負整數重新排列他們的順序把他們組成一個最大的整數。

想法是,排序陣列中的數,但需要重新定義排序的比較函式。

對於兩個數a、b,分別拼接成ab和ba,以這兩個數的大小定義排序大小。

使用sprintf函式將數字轉換成字串。

將兩個數字拼接是大小會超過int,需要使用long long。

拼接之後需要去掉前導零。

class Solution {
public:
    /**
     *@param num: A list of non negative integers
     *@return: A string
     */
    static bool cmp(int a, int b){
        char sa[100],sb[100];
        sprintf(sa,"%d",a);
        sprintf(sb,"%d",b);
        int lena = strlen(sa);
        int lenb = strlen(sb);
        long long ta = a*(long long)pow(10, lenb) + b;
        long long tb = b*(long long)pow(10, lena) + a;
        return ta > tb;
    }
    
    string largestNumber(vector<int> &num) {
        // write your code here
        sort(num.begin(), num.end(), cmp);
        char str[100];
        string ans = "";
        for(int i = 0; i < num.size(); i++){
            sprintf(str,"%d",num[i]);
            //return ans;
            if(ans == "0" && str[0] == '0')
                //return str;
                continue;
            ans += str;
        }
        return ans;
    }
};