题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
为了避免大数问题(拼接起来的数字可能造成越界),将数字转化为字符串进行处理,自定义一个排序规则:
若ab > ba 则 a 大于 b,
若ab < ba 则 a 小于 b,
若ab = ba 则 a 等于 b;
比较完之后按顺序输出即可。
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
if(numbers.size() == 0)
return "";
sort(numbers.begin(), numbers.end(), cmp);
string res;
for(int i = 0; i<numbers.size(); i++) {
res += to_string(numbers[i]);
}
return res;
}
private:
static bool cmp(int x, int y) {
string A = to_string(x) + to_string(y);
string B = to_string(y) + to_string(x);
return A < B;
}
};
Python
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
if not numbers:
return ""
#将所有数字转化为字符串
numbers = map(str, numbers)
l = lambda x, y: int(x+y) - int(y+x) #指定比较方式
numsort = sorted(numbers, l)#用特定的方式进行比较
return ''.join(i for i in numsort)#排完序之后使用join进行连接