输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 [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)

相关文章:

猜你喜欢
  • 2021-12-10
  • 2021-07-03
  • 2021-10-26
  • 2022-12-23
  • 2021-06-21
  • 2021-04-09
相关资源
相似解决方案