45 把数组排成最小的数

题目

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 [3,32,321][3,32,321] ,则打印出这三个数字能排成的最小数字为 321323321323 。

牛客网 OJ
AcWing OJ

C++ 题解

把数字转换成字符串再进行比较:

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        string answer;
        sort(numbers.begin(),numbers.end(),cmp);
         for(int i=0;i<numbers.size();i++)
             answer+=to_string(numbers[i]);
         return answer;
    }
    
    // 自定义比较函数
    static bool cmp(int a,int b)
    {
       if (to_string(a)+ to_string(b) < to_string(b)+ to_string(a))
           return true;
        else
            return false;
    }
};

python 题解

# -*- coding:utf-8 -*-
class Solution:
    def PrintMinNumber(self, numbers):
        # write code here
        if len(numbers)<=0:
            return ""
        str_numbers=[str(i) for i in numbers]
        res=sorted(str_numbers,cmp=lambda x,y:cmp(x+y,y+x))
        return ''.join(res)
posted @ 2019-03-16 15:34  youngliu91  阅读(126)  评论(0)    收藏  举报