输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
比较大小时候的巧妙解法
public class Solution {
public String PrintMinNumber(int [] numbers) {
Integer []s = new Integer[numbers.length];
for(int i=0;i<numbers.length;i++){
s[i] = new Integer(numbers[i]);
}
Arrays.sort(s, new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
int a = Integer.valueOf(o1+""+o2);
int b = Integer.valueOf(o2+""+o1);
return a-b;
}
});
StringBuilder str = new StringBuilder("");
for(int i=0;i<numbers.length;i++){
str.append(String.valueOf(s[i]));
}
return str.toString();
}
}
纯手写比较的方法
public class Solution {
int xa[] = new int[100];
int lena = 0;
int xb[] = new int[100];
int lenb = 0;
public boolean compareSmaller(int a,int b){
lena=0;
while(a!=0){
xa[lena] = a%10;
a=a/10;
lena++;
}
lenb = 0;
while(b!=0){
xb[lenb] = b%10;
b=b/10;
lenb++;
}
int i=lena-1;
int j=lenb-1;
while(i>=0&&j>=0){
if(xa[i]>xb[j]){
return false;
}
i--;j--;
}
if(i>=0&&xa[i]>xb[lenb-1]) return false;
if(j>=0&&xa[lena-1]>xb[j]) return false;
return true;
}
public String PrintMinNumber(int [] numbers) {
for(int i=0;i<numbers.length;i++){
for(int j=i;j<numbers.length;j++){
if(!compareSmaller(numbers[i],numbers[j])){
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
StringBuilder strb = new StringBuilder();
for(int i=0;i<numbers.length;i++){
strb.append(String.valueOf(numbers[i]));
}
return strb.toString();
}
}