题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
C++实现:
class Solution {
public:
bool compare(int a, int b)
{
stringstream s1, s2;
s1 << a;
s2 << b;
string s3, s4;
s3 = s1.str();
s4 = s2.str();
if((s3 + s4) >= (s4 + s3))
return true;
else
return false;
}
string PrintMinNumber(vector<int> numbers) {
string result;
int t = numbers.size();
if(t == 0)
return result;
vector<string> r;
for(int i = 0; i < t - 1; i ++)
{
for(int j = 0; j < t - i - 1; j ++)
{
if(compare(numbers[j], numbers[j + 1]))
{
int c = numbers[j + 1];
numbers[j + 1] = numbers[j];
numbers[j] = c;
}
}
}
for(int i = 0; i < t; i ++)
{
stringstream ss;
ss << numbers[i];
result.append(ss.str());
}
return result;
}
};
python实现:
思路:定义一个比较的顺序,然后采用该顺序进行排序,得到排序的数列。
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
def compare(a, b):
t1 = str(a) + str(b)
t2 = str(b) + str(a)
if int(t1) >= int(t2):
return True
else:
return False
t = len(numbers)
if t == 1:
return numbers[0]
if t == 0:
return ''
for i in range(0, t - 1):
for j in range(0, t - i - 1):
if compare(numbers[j], numbers[j + 1]):
a = numbers[j + 1]
numbers[j + 1] = numbers[j]
numbers[j] = a
s = str(numbers[0])
for i in range(1, t):
s = s + str(numbers[i])
return s