Practice22:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
S1
暴力解法:
class Solution {
public:
void LoopNum(int pos,vector<int>& num,string& ret){
if(pos+1==num.size()){
string res = "";
for(int val:num){
res+=to_string(val);
}
ret=min(ret,res);
return;
}
for(int i=pos;i<num.size();++i){
swap(num[pos],num[i]);
LoopNum(pos+1, num, ret);
swap(num[pos],num[i]);
}
}
string PrintMinNumber(vector<int> numbers) {
string ret(numbers.size(),'9');
LoopNum(0, numbers, ret);
return ret;
}
};
S2
牛客解题之一:
class Solution {
public:
string PrintMinNumber(vector<int> nums) {
vector<string> str;
for (int val : nums) str.push_back(to_string(val));
sort(str.begin(), str.end(), [](string a, string b) {
return a + b < b + a;
});
string ret = "";
for (string s : str) ret += s;
return ret;
}
};

本文介绍了一种算法问题的解决方法,即如何将数组中的整数通过不同的排列组合,找出能组成最小数值的方案。提供了两种实现方式,一种是通过递归遍历所有可能的排列组合来找到最小值;另一种则是利用排序方法,比较两个数字拼接后的大小,以此进行排序后拼接得到最小值。
729

被折叠的 条评论
为什么被折叠?



