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

编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个

2016-11-09 11:00 711 查看
注意:最近有朋友指出了该做法并不正确,特此声明,当然,希望有大神可以来改正一下,本人能力有限,只能换一种方法去做。

错误做法:

public class Demo {     //错误原因:跟Arrays.sort的排序方式有关s

    /**

     * 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个

     */

    public static void main(String[] args) {

        int [] arr = {20, 321, 21 ,10,8};          //要求输出1020213218

        

        StringBuffer sbBuffer = new StringBuffer();

        

        for (int i = 0; i < arr.length; i++) {      //利用StringBuffer将数组拼接成字符串

            if(i == (arr.length -1 )){

                sbBuffer.append(arr[i]);            //最后一个不加空格

            }else{

                sbBuffer.append(arr[i] + " ");    //拼接时加上空格,以便正则split的使用

            }

        }

        

        System.out.println(sbBuffer);          //输出拼接的结果

         //熟悉正则match()、split()

        String[] strs = sbBuffer.toString().split(" ");        //利用正则split根据空格,将字符串转成字符串数组    

        

        Arrays.sort(strs);                                                   //利用Arrays.sort()进行数组的排序

        

        StringBuffer sbBuffer2 = new StringBuffer();    

        for (int i = 0; i < strs.length; i++) {                      //排序之后再拼接成字符串,即可得到结果

            

                sbBuffer2.append(strs[i]);

        }

        System.out.println(sbBuffer2);

    }

}

正确做法:

/**
* 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
* 思路:对于两个字符串重新定义其大小规则,比如:给定两个字符串s1,s2,如果(s1+s2)>(s2+s1) 那么s1>s2,反之s2>s1
*/
public class Demo1{

public long newSort(long []arr) {  //用长整型以免数据易于溢出
long result;
List<String> list=new ArrayList<String>();

//转为字符串数组,利用Comparator比较
for (long i:arr) { //第一种for循环输出方法;注意这里遍历输出的是对象
list.add(String.valueOf(i));
}

/*	for (int i = 0; i < arr.length; i++) { //第二种传统的遍历输出方法;两者等同
long a=arr[i];
list.add(String.valueOf(a));
}*/

//自定义比较并排序
Collections.sort(list, new Comparator<String>(){
public int compare(String o1, String o2) {
String m=o1+o2;
String n=o2+o1;
return m.compareTo(n);
}
});

//最后将排好序的字符串进行拼接得出结果
StringBuffer sBuffer=new StringBuffer();

for (String str : list) {
sBuffer.append(str);
}
result=Long.parseLong(sBuffer.toString());
return result;
}

public static void main(String[] args) {

long []a={3,32,321};
long []b={152,203,32,54,56,8};
Demo1 demo=new Demo1();
long c=demo.newSort(b);
long d=demo.newSort(a);
System.out.println(c+"\r"+d);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐