把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

string.append 在末尾添加string或char。string.compare,逐个比较,abcd>ab;

思路:先讲num转化为string。之后对于string的比较,str1+str2<str2+str1;将其排序即可。对于num转string,用stringstream。

另一种写法,string *str=new string[n],string数组

 1 class Solution {
 2 public:
 3     string PrintMinNumber(vector<int> numbers) {
 4        
 5         int n=numbers.size();
 6         string res;
 7         if(n<1) return res;
 8         vector<string> str;
 9         string tmp;
10         for(int i=0;i<n;i++){
11             stringstream stream;
12             stream<<numbers[i];
13             stream>>tmp;
14             str.push_back(tmp);
15             stream.clear();
16         }
17         for(int i=0;i<n-1;i++){
18             for(int j=0;j<n-1-i;j++){
19                 if(compare(str[j],str[j+1]))
20                     swap(str[j],str[j+1]);
21             }
22         }
23         for(int i=0;i<n;i++)
24             res+=str[i];
25         return res;
26     }
27 private:
28     bool compare(string str1,string str2){
29         string tmp1=str1.append(str2);
30         string tmp2=str2.append(str1);
31         if(tmp1.compare(tmp2)>0)
32             return true;
33         return false;
34     }
35 };
原文地址:https://www.cnblogs.com/zl1991/p/4775356.html