第73题 Largest Number

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.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

Hide Tags
  Sort









Solution in C++:
class Solution {
public:
    string largestNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end(), Compare);
        if(nums[nums.size()-1]==0||nums.size()==0) return "0";
        string solution = "";
        
        for(int i=nums.size()-1; i>= 0; i--){
            solution+= to_string(nums[i]);
        }
        return solution;
        
    }
    static bool Compare(const int &a, const int &b){
        string strA = to_string(a);
        string strB = to_string(b);
        if(strA.size()==strB.size()) return a<b;
        int digit=0;
        while(digit<strA.size()&&digit<strB.size()){
            if(strA[digit]-'0'<strB[digit]-'0') return true;
            if(strA[digit]-'0'>strB[digit]-'0') return false;
            digit++;
        }
        if(digit<strA.size()){
            if(strA[digit]=='0') return true;
            return Compare(atoi(strA.substr(digit).c_str()), b);
        } 
        if(digit<strB.size()){
            if(strB[digit]=='0') return false;
            return Compare(a, atoi(strB.substr(digit).c_str()));
        } 
    }
};



Note: 如果排完序后最大数为0,说明数组里所有数都是0,要返回“0”。
atoi是c里面的函数,参数必须是const char*,所以要把字符串c_str()一下。
C++中substr函数参数为(起始index,substring长度),所以endindex = startIndex+length-1
Compare函数必须是static bool类型,<返回true,>=返回false。
当两数从左数i位都相同,调用递归时,因为atoi函数会将最前面的0省略,而如果获得的substr从0开始时,比任何其他不从0开始的数排序都应该小,所以strA[digit]和strB[digit]为‘0’时,直接返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值