总体思路是将数组中的数字按照一定规则进行排序,最后将其组合成字符串输出。
排序的规则可以有两种实现方式:
按位循环比较,外层循环为长度较长的字符串,比较的下标取外循环下标对较短长度取余
若mn>nm 则交换m、n
代码如下:
class Solution {
public:
bool check2(int a,int b)
{
string aa=to_string(a);
string bb=to_string(b);
int alen=aa.size();
int blen=bb.size();
if(alen>blen)
{
for(int i=0;i<alen;i++)
{
int index=i%blen;
if(aa[i]>bb[index])
return true;
}
}
else
{
for(int i=0;i<blen;i++)
{
int index=i%alen;
if(aa[index]>bb[i])
return true;
}
}
return false;
}
bool check(int a,int b)
{
string aa=to_string(a);
string bb=to_string(b);
if(aa+bb>bb+aa)
{
return true;
}
else
{
return false;
}
}
string PrintMinNumber(vector<int> numbers) {
string result;
int len=numbers.size();
if(len<1)
return result;
//先将数组中的数字进行排序
for(int i=0;i<len-1;i++)
for(int j=i+1;j<len;j++)
{
if(check(numbers[i],numbers[j]))
{
int temp=numbers[i];
numbers[i]=numbers[j];
numbers[j]=temp;
}
}
//将排过序的数字组合成字符串
for(int i=0;i<len;i++)
result.append(to_string(numbers[i]));
return result;
}
};