題目描述
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。
思路
先把整數轉化爲字符串,這樣容易處理
現在假設有三個字符串 "3" "32" "321"
對這三個字符串排序,比如說 "3" 和 "32" 排序 先拼成 "332" 和 "323" 比較兩個憑藉後的字符串的大小,如果"332"大 就交換"3"
和"32".
按照這個方法最後排序後的字符串拼接起來就是所有拼接的方式中最小的字符串了。
代碼
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
class Solution {
public:
//這個比較和strcmp不是完全一樣
int my_strcmp(string str1,string str2)
{
string tmp1=str1+str2;
string tmp2=str2+str1;
return strcmp(tmp1.c_str(),tmp2.c_str());//拼接比較
}
string PrintMinNumber(vector<int> numbers) {
const int len=numbers.size();
string str[len];
char buf[50]={0};
for(int i=0;i<len;i++)
{
sprintf(buf,"%d",numbers.at(i));
str[i].append(buf);
}
//排序 降序
for(int i=0;i<len;i++)
{
for(int j=0;j<len-i-1;j++)
{
if(my_strcmp(str[j],str[j+1])>0)
{
string tmp;
tmp=str[j];
str[j]=str[j+1];
str[j+1]=tmp;
}
}
}
string ret;
for(int i=0;i<len;i++)
ret+=str[i];
return ret;
}
};