把数组排成最小的数

题目

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

 

分析

  将数字转换为字符串形式,然后对字符串数组进行字符串的排序(本题中用的是快排),最后按照顺序连接起来即为输出。

  注意,在比较两个字符串时,前提是两个字符串的长度相等,所以在比较str1和str2时,我们比较的是str1+str2和str2+str1。

 

代码

 1     public boolean compare(String str1, String str2){
 2         String s1 = str1+str2, s2 = str2+str1;
 3         if(s1.compareTo(s2)>0){
 4             return true;
 5         }
 6         else{
 7             return false;
 8         }
 9     }
10     
11     public void sort(String[] s, int low, int high){
12         if(low>high)
13             return;
14         int i = low, j = high;
15         String index = s[low];
16         while(i<j){
17             while(i<j && compare(s[j], index))
18                 j--;
19             if(i<j)
20                 s[i++] = s[j];
21             while(i<j && compare(index, s[i]))
22                 i++;
23             if(i<j)
24                 s[j--] = s[i];
25         }
26         s[i] = index;
27         sort(s, low, i-1);
28         sort(s, i+1, high);
29     }
30     
31     public String PrintMinNumber(int[] numbers){
32         String[] s = new String[numbers.length];
33         for(int i=0;i<numbers.length;i++){
34             s[i] = numbers[i]+"";
35         }
36         sort(s, 0, s.length-1);
37         String res = "";
38         for(int i=0;i<s.length;i++){
39             res += s[i];
40         }
41         return res;
42     }

 

posted on 2017-06-07 16:49  一个不会coding的girl  阅读(135)  评论(0编辑  收藏  举报

导航