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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值