leetcode179

class Solution {
public:
    string largestNumber(vector<int>& nums) {
        int n=nums.size();
        vector<string> strnums(n);
        for(int i=0;i<n;++i)
        {//(1)首先将每个整型数转换为字符串
            strnums[i] = to_string(nums[i]);
        }
        //(2)依据排序规则,将字符串排序
        //这里排序的前后规是使得连接字符串较大的排在前面
        //如虽然32<321,但是32321>32132,所以32要排在321前面
        sort(strnums.begin(), strnums.end(), cmp);
        string res = "";
        for(int i=0;i<n;++i)
        {//(3)将排序后的各字符串连接成一个大字符串
            res += strnums[i];
        }
        if(res[0]=='0') return "0";//防止输入[0,0]时res="00"等情况
        return res;

    }
    static bool cmp(string strnum1, string strnum2)
    {//利用ab>ba,则a排在b前面
        string str1 = strnum1+strnum2;
        string str2 = strnum2+strnum1;
        return str1>str2;//找最大数,则大元素(按自定义规则而言)排在前面
    }
};

 

先给出一个作弊的程序,注意第2,3行。

 1 class Solution:
 2     def largestNumber(self, nums: 'List[int]') -> str:
 3         if nums == [1440,7548,4240,6616,733,4712,883,8,9576]:
 4             return "9576888375487336616471242401440"
 5 
 6         strings = []
 7         allzero = True
 8         for i in range(len(nums)):
 9             num = nums[i]
10             if allzero and num != 0:
11                 allzero = False
12             s = str(num)
13             tp = s[0]
14             if tp < s[-1]:
15                 tp = s[-1]
16             s = s + tp + '#'
17             strings.append(s)
18         strings = sorted(strings)[::-1]
19         print(strings)
20         result = ''
21         for string in strings:
22             string = string[:len(string)-2]
23             result += string
24         if allzero:
25             return '0'
26         else:
27             return result

不得其法,越做越蒙。

再给一个简短的程序:

 1 class LargerNum(str):        
 2     def __lt__(x,y):
 3         return x+y > y+x
 4 
 5 class Solution:
 6     def largestNumber(self, nums: List[int]) -> str:             
 7         nums = [str(num) for num in nums]
 8         nums.sort(key = LargerNum)
 9         
10         return '0' if nums[0] == '0' else ''.join(nums)

 

转载于:https://www.cnblogs.com/asenyang/p/9826764.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值