题目:
输入一个正整数数组,把数组里所有数组拼接起来排成一个数,打印能拼接出的数字中最小的一个。例如输入数组{3, 32, 321}
,则打印出这3个数字能排成的最小数字321323
。
解析:
首先把数组转换成字符串数组,进行字符串自定义排序,使用lambda表达式进行自定义排序,auto Lambda = [](类型 变量, 类型 变量) {return 排序条件;};
,就能自动推导出排序规则。
参考答案:
class Solution{
public:
string minNumber(vector<int> nums){
if(nums.size() == 0){
return "";
}
vector<string> vstr;
string ans;
for(int i = 0; i < nums.size(); ++i){
/*数组转换成字符串数组*/
vstr.push_back(to_string(nums[i]));
}
/*lambda表达式写法*/
auto compare = [](string &a, string &b) {return a + b < b + a;};
sort(vstr.begin(), vstr.end(), compare);
for(int i = 0; i < vstr.size(); ++i){
ans += vstr[i];
}
return ans;
}
};