题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
s[i]+temp<=temp+s[i]
s[i]+temp<temp+s[i]||s[i]==temp
这两个表达式是不同的,比如a=1,b=11 则a+b=b+a 但是a!=b注意!
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
if(numbers.empty())
return string{};
vector<string> *vec_str=new vector<string>{};
for(auto c:numbers)
vec_str->push_back(to_string(c));
myquicksort(*vec_str,0,vec_str->size()-1);
string *res_str=new string{};
for(auto c:*vec_str)
(*res_str)+=c;
return *res_str;
}
void myquicksort(vector<string> &s,int begin,int end)
{
if(begin>=end)
return;
string temp=s[begin];
int i=begin;
int j=end;
while(i<j)
{
while(s[j]+temp>=temp+s[j]&&i<j)
--j;
s[i]=s[j];
while(s[i]+temp<=temp+s[i]&&i<j)
++i;
s[j]=s[i];
}
s[i]=temp;
myquicksort(s,begin,i-1);
myquicksort(s,i+1,end);
}
};