33 把数组排成最小的数

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

 

C++:

 1 class Solution {
 2 public:
 3     static bool cmp(string s1 , string s2){
 4         return s1+s2 < s2+s1 ;
 5     }
 6     
 7     string PrintMinNumber(vector<int> numbers) {
 8         vector<string> nums ;
 9         for(int num : numbers){
10             nums.push_back(to_string(num)) ;
11         }
12         sort(nums.begin() , nums.end() , cmp) ;
13         string res = "" ;
14         for(string str : nums){
15             res += str ;
16         }
17         return res ;
18     }
19 };

 

 

java:

 1 import java.util.Comparator;
 2 import java.util.Arrays;
 3 
 4 public class Solution {
 5     public String PrintMinNumber(int [] numbers) {
 6         int n = numbers.length ;
 7         String[] nums = new String[n] ;
 8         for(int i = 0 ; i < n ; i++){
 9             nums[i] = numbers[i] + "" ;
10         }
11         Arrays.sort(nums , (s1,s2) -> (s1+s2).compareTo(s2+s1)) ;
12         String res = "" ;
13         for(String str : nums){
14             res += str ;
15         }
16         return res ;
17     }
18 }

 

posted @ 2018-05-08 15:31  __Meng  阅读(132)  评论(0编辑  收藏  举报