对n之内的数字进行字典序排序(java)

刷题时,遇到的问题,目前是想到了两种方式:一种是重写比较器;另外一种是使用字符串的表达方式,而后进行天然排序。java

下面给出例子。数组


一、改写比较器方式ide

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,



二、天然排序方式测试

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

输出结果:spa

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


三、其实改写比较器是常写的,本身比较熟悉,此次是对String类型的集合进行天然排序的第一次使用,原来String类型的集合天然排序是字典排序形式,这可能之后在刷题时候能够用到的一个方式呢。同时测试了数组类型为String,天然排序也是字典排序。只是写法两个不一样而已,数组就是Arrays.sort(),而list集合是Collections.sort()。code