[leetcode]Largest Number

来源:互联网 发布:钱龙软件 编辑:程序博客网 时间:2024/06/05 03:38

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

思路: 这道题是sort下面的,说明这道题跟sort有关。主要问题就是排序规则,如何判定两个数,谁在前谁在后?答案就是,谁在前能让整个数更大,谁就应该在前,比如3,30,3在前就是330,30在前就是303,330>303,所以3应该在前,如此重写comparator,定义排序规则即可。

public class Solution {    public String largestNumber(int[] num) {int n = num.length;        if (n < 1) return "";                String[] strs = new String[n];        for (int i = 0; i < n; i++) {            strs[i] = String.valueOf(num[i]);        }                Arrays.sort(strs, new Cmp());                String ans = "";        for (int i = n - 1; i >= 0; i--) {        ans = ans.concat(strs[i]);        }                int i = 0;        while (i < n && ans.charAt(i) == '0') {            i++;        }        if (i == n) return "0";                return ans.substring(i);    }}class Cmp implements Comparator<String>{public int compare(String a, String b) {    String ab = a.concat(b);    String ba = b.concat(a);int flag = 0;for(int i = 0; i < ab.length() - 1 ; i++){    if(ab.charAt(i) > ba.charAt(i)){        flag = 1;        break;    }else if(ab.charAt(i) < ba.charAt(i)){        flag = -1;        break;    }else{        flag = 0;    }}return flag;}}


0 0
原创粉丝点击