这道题目的思路,此题求拼接起来的最小数字,本质上是一个排序问题。设数组 nums 中任意两数字的字符串为 a,b 假如a+b<b+a则可以证明a要排在b前面,然后套用任何排序就可以了我们用快速排序,顺便复习快排,快排要注意递归里面的条件low<high这是很重要的,这是跳出循环的关键
int getmid(vector<string>& nums,int low,int high)
{
string temp=nums[high];
int i=low;
for(int j=low;j<high;j++)
{
if(nums[j]+temp<temp+nums[j])
{
swap(nums[j],nums[i++]);
}
}
swap(nums[high],nums[i]);
return i;
}
void qsort(vector<string> &nums,int low,int high)
{
if(low<high)
{
int mid=getmid(nums,low,high);
qsort(nums,low,mid-1);
qsort(nums,mid+1,high);
}
}
string minNumber(vector<int>& nums) {
vector<string> strs;
for(int i = 0; i < nums.size(); i++)
strs.push_back(to_string(nums[i]));
qsort(strs,0,strs.size()-1);
string res;
for(string s : strs)
res.append(s);
return res;
}