输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
题解
排序
第一反应 字符串排序 然后从小到大拼接 然后发现 例如 1 10 就会变成 110 而最小值为101,所以不能简单的按照字典序排 需要根据 前后字符串拼接结果来排 sort 重写下cmp
bool cmp(string s1, string s2) {
return s1+s2 < s2+s1;
}
class Solution {
public:
static bool cmp(string s1, string s2) {
return s1+s2 < s2+s1;
}
string minNumber(vector<int>& nums) {
vector<string> arr;
int n = nums.size();
for(int i=0; i<n; i++) {
string num = to_string(nums[i]);
arr.push_back(num);
}
sort(arr.begin(), arr.end(), cmp);
string ans = "";
for(int i=0; i<arr.size(); i++) {
ans += arr[i];
}
return ans;
}
};