题解 | #把数组排成最小的数#
把数组排成最小的数
http://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993
class Solution {
public:
//本题只需要定义一个关于两个整数的排序比较器规则即可
bool static cmp(int a,int b){
//首先把这两个整数变成string类型
string str1=to_string(a);
string str2=to_string(b);
string tmp1=str1+str2;
string tmp2=str2+str1;
int i=0;
while(i<tmp1.length()){
if(tmp1[i]==tmp2[i])
{
i++;
}
else if(tmp1[i]<tmp2[i]){//说明第一个整数应该在第二个整数前面
return true;
}
else{
return false;
}
}
return false;//为什么相等的时候还必须返回false啊,要不是我之前看到过c++的比较器规则猛然想起来,鬼知道bug在哪啊。。
}
string PrintMinNumber(vector<int> numbers) {
string res="";
// string str=to_string(numbers[0]);
// cout<<str<<endl;
// cout<<str.length()<<endl;
// return res;
if(numbers.size()==0)
return res;
sort(numbers.begin(), numbers.end(),cmp);
for(int i=0;i<numbers.size();i++){
cout<<numbers[i]<<" ";
string tmp=to_string(numbers[i]);
res+=tmp;
}
return res;
}
};
public:
//本题只需要定义一个关于两个整数的排序比较器规则即可
bool static cmp(int a,int b){
//首先把这两个整数变成string类型
string str1=to_string(a);
string str2=to_string(b);
string tmp1=str1+str2;
string tmp2=str2+str1;
int i=0;
while(i<tmp1.length()){
if(tmp1[i]==tmp2[i])
{
i++;
}
else if(tmp1[i]<tmp2[i]){//说明第一个整数应该在第二个整数前面
return true;
}
else{
return false;
}
}
return false;//为什么相等的时候还必须返回false啊,要不是我之前看到过c++的比较器规则猛然想起来,鬼知道bug在哪啊。。
}
string PrintMinNumber(vector<int> numbers) {
string res="";
// string str=to_string(numbers[0]);
// cout<<str<<endl;
// cout<<str.length()<<endl;
// return res;
if(numbers.size()==0)
return res;
sort(numbers.begin(), numbers.end(),cmp);
for(int i=0;i<numbers.size();i++){
cout<<numbers[i]<<" ";
string tmp=to_string(numbers[i]);
res+=tmp;
}
return res;
}
};