数组:最大数字

    给定一个非负整数数组,对它进行排序,使它的元素组成一个最大的数字。如数组[3, 30, 34, 5, 9],得到的最大数字为9534330。因为数字可能非常大,因此要求以字符串的形式输出。

    方法一:先把数字转化为字符串,再实现字符串的compare比较函数

    public String largestNumber(int[] nums) {
        List list = new ArrayList();
        for(int num : nums)
            list.add(num + "");
        Collections.sort(list, new Comparator() {
            @Override
            public int compare(String s1, String s2) {
                int i = 0, j = 0;
                while(s1.charAt(i) == s2.charAt(j)) {//前面的数字相同
                    if(i + 1 == s1.length() && j + 1 == s2.length()) //两个数字完全相同
                        break;
					i = s1.length() != i + 1 ? i + 1 : 0; //循环比较
					j = s2.length() != j + 1 ? j + 1 : 0;
				}
                return s1.charAt(i) >= s2.charAt(j) ? -1 : 1;
            }
        });
        String result = "";
        for(String s : list)
            result += s;
        if(result.startsWith("0")) //避免输出“00”这种形式
           return "0";
        return result;
    }

    方法二:其实compare函数可以更简单:比较两个数组s1和s2,如果s1+s2>s2+s1,则s1>s2。

Comparator comp = new Comparator(){
		    @Override
		    public int compare(String str1, String str2){
		        String s1 = str1 + str2;
			String s2 = str2 + str1;
			return s2.compareTo(s1); // 因为要先输出大的,而sort是从小到大排序,所以倒序一下
		    }
	        };

    上述代码还可以简化:

Collections.sort(list, (String s1, String s2) -> (s2 + s1).compareTo(s1 + s2));


你可能感兴趣的:(数组)