您的位置:首页 > 编程语言

真的就有人可以用两三行代码实现你写了几十行代码的功能.....

2016-07-08 19:02 357 查看
问题描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

1     /*
2      *比较两个数字拼接字符串时,谁排在前的call back 函数
3      *
4      *比较条件为将两个整数转换成字符串后,从最高位开始比,如果小的排在前面
5      *如果比较到末尾结束两个字符串都相同,则将短的那个字符串的第一个字符和长的字符串剩下的字符比较,比较结果小的排在前面
6      *
7      */
8     public Comparator<Integer>NumberCompare()
9     {
10         return new Comparator<Integer>() {
11             @Override
12             public int compare(Integer number1, Integer number2) {
13                 // TODO Auto-generated method stub
14                 /*
15                 char str1[] = number1.toString().toCharArray();
16                 char str2[] = number2.toString().toCharArray();
17
18                 int len = str1.length > str2.length ? str2.length : str1.length; //获得长度小的,作为循环判断终止条件
19
20                 int index;
21                 for(index = 0; index < len; index++)
22                 {
23                     if(str1[index] > str2[index])
24                     {
25                         return 1;
26                     }
27                     else if(str1[index] < str2[index])
28                     {
29                         return -1;
30                     }
31                 }
32
33
34                 if(len == str1.length)
35                 {
36                     for(int i = index; i < str2.length; i++)
37                     {
38                         if(str1[0] < str2[i])
39                         {
40                             return -1;
41                         }
42                         else if(str1[0] > str2[i])
43                         {
44                             return 1;
45                         }
46                     }
47                 }
48                 else
49                 {
50                     for(int i = index; i < str1.length; i++)
51                     {
52                         if(str1[i] < str2[0])
53                         {
54
a1c6
return -1;
55                         }
56                         else if(str1[i] > str2[0])
57                         {
58                             return 1;
59                         }
60                     }
61                 }
62                 //System.out.println(number1 + " ==== " + number2);
63                 return 0;
64                 */
65
66                 /*
67                  * 代码优化
68                  * 巧妙的比较方式
69                  */
70                 String str1 = number1.toString();
71                 String str2 = number2.toString();
72
73                 str1 = str1 + str2;
74                 str2 = str2 + str1;
75
76
77                 return str1.compareTo(str2);
78
79
80             }
81         };
82     }
83
84
85     public String PrintMinNumber(int [] numbers)
86     {
87         String string = new String();
88
89         if(numbers == null || numbers.length == 0)
90         {
91             return string;
92         }
93
94         Comparator<Integer> comparator = NumberCompare();
95         Integer IntNumbers[] = new Integer[numbers.length];
96
97         for(int i = 0; i < numbers.length; i++)
98         {
99             IntNumbers[i] = numbers[i];
100         }
101
102         Arrays.sort(IntNumbers, comparator);
103
104
105
106         for(int i = 0; i < IntNumbers.length; i++)
107         {
108             string += IntNumbers[i].toString();
109         }
110
111         return string;
112     }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: