对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 list=new ArrayList();
            for(int i=0;i() {
                @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 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 list=new ArrayList();
            for(int i=0;i 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()。


你可能感兴趣的:(算法,nowcoder笔记)