题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
自己写一个排序规则,将两个数字都转成字符串,然后比较不同次序的排序后的字符串,输出较小的一个。
最后将排序好的数组按顺序拼接好输出即可。
class Solution{
public:
string PrintMinNumber(vector<int> numbers){
string ans;
if (numbers.empty()) return ans;
sort(numbers.begin(), numbers.end(), cmp);
for (int i = 0; i < numbers.size(); ++i)
{
ans += to_string(numbers[i]);
}
return ans;
}
static bool cmp(int a, int b)
{
string str1 = to_string(a);
string str2 = to_string(b);
return (str1 + str2) < (str2 + str1);
}
};
python 的解法:
其中lstrip() 方法用于截掉字符串左边的空格或指定字符。
# -*- coding:utf-8 -*-
from functools import cmp_to_key
class Solution:
def cmp(self, a, b):
if a + b > b + a:
return 1
if a + b < b + a:
return -1
else:
return 0
def PrintMinNumber(self, numbers):
# write code here
if len(numbers) == 0:
return ""
numstr = list(map(str, numbers))
numstr.sort(key=cmp_to_key(self.cmp))
return"".join(number).lstrip('0')