刷题笔记:String中的compareTo()函数(把数组排成最小的数)

源码:String.java – compareTo()

    public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

思想:它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.否则返回自己长度减去另一个字符串的长度。返回值是int类型
eg:“aaa” “aa” 返回3-2=1 “ab” “aa” 返回 “b”-“a” = 1

题目:把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

    public static String MinOrder(int[] numbers){
        StringBuilder sb = new StringBuilder();
        String[] str = new String[numbers.length];
        for(int i=0;i() {
                @Override
                public int compare(String o1, String o2) {
                    String num1 = o1 + o2;
                    String num2 = o2 + o1;
                    return num1.compareTo(num2);
                }
            }
        );
        for(int i=0;i

你可能感兴趣的:(刷题笔记)