1. 程式人生 > >對n以內的數字進行字典序排序(java)

對n以內的數字進行字典序排序(java)

刷題時,遇到的問題,目前是想到了兩種方式:一種是重寫比較器;另一種是使用字串的表達方式,然後進行自然排序。

下面給出例子。

1、改寫比較器方式

package schooloffer17;

import java.util.*;

/**
 * @Author: cxh
 * @CreateTime: 17/11/21 15:28
 * @ProjectName: JavaBaseTest
 * <字典排序></>
 */
public class DictionaryOrder {
    public static void main(String[] args) {
        int n,m;
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()){
            n=scanner.nextInt();//n個數字排序

            ArrayList<Integer> list=new ArrayList<Integer>();
            for(int i=0;i<n;i++)
                list.add(i+1);
            Collections.sort(list, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    String str1=String.valueOf(o1);
                    String str2=String.valueOf(o2);
                    if(str1.length()==str2.length()){
                        return (int)(o1-o2);//長度相同,升序
                    }else{
                        for(int i=0;i<Math.min(str1.length(),str2.length());i++){
                            if(str1.charAt(i)!=str2.charAt(i)){
                                return str1.charAt(i)-str2.charAt(i);
                            }
                        }
                        return str1.length()-str2.length();
                    }
                }
            });

            //輸出list
            Iterator<Integer> iterator=list.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next()+",");
            }
        }
    }
}
輸入:15
輸出結果:
1,
10,
11,
12,
13,
14,
15,
2,
3,
4,
5,
6,
7,
8,
9,


2、自然排序方式

package schooloffer17;

import java.util.*;

/**
 * @Author: cxh
 * @CreateTime: 17/11/21 15:28
 * @ProjectName: JavaBaseTest
 * <字典排序></>
 */
public class DictionaryOrder {
    public static void main(String[] args) {
        int n,m;
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()){
            n=scanner.nextInt();//n個數字排序

            ArrayList<String> list=new ArrayList<String>();
            for(int i=0;i<n;i++)
                list.add(String.valueOf(i+1));
            Collections.sort(list);

            //輸出list
            Iterator<String> iterator=list.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next()+",");
            }
        }
    }
}

輸入:15

輸出結果:

1,
10,
11,
12,
13,
14,
15,
2,
3,
4,
5,
6,
7,
8,
9,


3、其實改寫比較器是常寫的,自己比較熟悉,這次是對String型別的集合進行自然排序的第一次使用,原來String型別的集合自然排序是字典排序形式,這可能以後在刷題時候可以用到的一個方式呢。同時測試了陣列型別為String,自然排序也是字典排序。只是寫法兩個不同而已,陣列就是Arrays.sort(),而list集合是Collections.sort()。