把数组排成最小的数
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把数组排成最小的数相关的知识,希望对你有一定的参考价值。
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
Input: [3,32,321]
Output : “321323”
class Solution {
public:
//自定义一个比较大小的函数,比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面
bool isSmaller(string s1, string s2)
{
for(int i=0; i<s1.length(); ++i)
{
if(s1[i]<s2[i])
return true;
else if(s1[i]>s2[i])
return false;
}
return true;
}
string PrintMinNumber(vector<int> numbers) {
if(numbers.size()==0)
return "";
vector<string> strVec;
string res;
for(int i=0; i<numbers.size(); ++i) //先int转化为string
{
string str = to_string(numbers[i]);
strVec.push_back(str);
}
for(int i=0; i<strVec.size(); ++i)
{
for(int j=i+1; j<strVec.size(); ++j)
{
string sum1 = strVec[i] + strVec[j];
string sum2 = strVec[j] + strVec[i];
if(!isSmaller(sum1, sum2)) //根据自定义规则调整顺序
{
string temp = strVec[i];
strVec[i].resize(strVec[j].size());
strVec[i] = strVec[j];
strVec[j] = temp;
}
}
res += strVec[i]; //比较一轮后,i位置即为最小元素
}
return res;
}
};
以上是关于把数组排成最小的数的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数