剑指 Offer 45. 把数组排成最小的数
剑指 Offer 45. 把数组排成最小的数
解题思路
将数字转换为字符串,按照字典序排序所有字符串
排序函数
str1.compare(str2)
> 0 str1 > str2
< 0 str1 < str2
= 0 str1 = str2
比如“30”和“9”,“300”和“30”
对于每一对数字
拼接“30”+“9”=“309”,和“9”+“30”=“930”,使用string的compare可以很方便的按照字典序比较。“309”<"930"
同样的:
“30030”<“30300”
注意
使用algorithm自带的sort函数,自定义的compare1函数要定义成静态函数
sort(numbers.begin(), numbers.end(), compare1)中第三个参数是一个函数指针,非静态成员函数指针和普通函数指针是有区别的。
原理参考> https://blog.csdn.net/u010982765/article/details/79021426
代码
class Solution {
public:
static bool compare1(int n1,int n2)
{
stringstream ss;
string str1,str2;
ss<<n1;
ss>>str1;
ss.clear();
ss<<n2;
ss>>str2;
string cmp1,cmp2;
cmp1=str1+str2;
cmp2=str2+str1;
return cmp1.compare(cmp2)<0;
}
string minNumber(vector<int>& nums) {
string res="";
sort(nums.begin(),nums.end(),compare1);
for(int i=0;i<nums.size();i++)
{
stringstream ss;
ss<<nums[i];
string temp;
ss>>temp;
res+=temp;
}
return res;
}
};
结果


浙公网安备 33010602011771号