返回目录
题意
给出若干个字符串,将它们按照某个顺序拼接,求最小的生成数
样例(可复制)
5 32 321 3214 0229 87
样例输出
22932132143287
提供几个易错样例
3
00 000 0000
//output 0
3
00 002 000
//output 2
3
0020 000 000
//output 20
注意点
- 本题贪心思想体现在cmp函数里,若a+b<b+a,则让a在前面,这样全局的数字也会最小
- 输出时需要剔除前面的0,所以先用ans将字符串拼起来再输出,string可以直接用+号拼接
#include <bits/stdc++.h>
using namespace std;
string num[10010];
bool cmp(string a,string b){
return a+b<b+a;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)cin>>num[i];
sort(num,num+n,cmp);
string ans;
for(int i=0;i<n;i++)ans+=num[i];
while(ans.size()!=0&&ans[0]=='0')ans.erase(ans.begin());
if(ans.size()==0)cout<<0;
else cout<<ans;
return 0;
}