45 把数组排成最小的数
题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 [3,32,321][3,32,321] ,则打印出这三个数字能排成的最小数字为 321323321323 。
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)

浙公网安备 33010602011771号