• 179. Largest Number


    题目:

    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.

    链接:http://leetcode.com/problems/largest-number/ 

    题解:

    用数组中的数字组合出一个最大的数,返回String。直接的想法是对数组中的数字做一个排序,再用排序好的数字来输出结果。这里排序的过程需要用一个Comparator,比较简便的方法是我们把int[]换乘String[],然后对String[]中的每个String进行逐字比较。

    之前还想过求数字最高位数的方法,比如给定n,那么最高位c = n / Math.pow(10, log10(n)),但比较的话还得转成Integer,比较麻烦,不如用String Comparator方便。

    Time Complexity - O(nlogn), Space Complexity - O(n)

    public class Solution {
        public String largestNumber(int[] nums) {
            if(nums == null || nums.length == 0)
                return "";
            String[] numsAsStrings = new String[nums.length];    
            
            for(int i = 0; i < nums.length; i++)
                numsAsStrings[i] = String.valueOf(nums[i]);
            
            Arrays.sort(numsAsStrings, new Comparator<String>() {           //anonymous new comparator
                public int compare(String s1, String s2) {
                    String s1s2 = s1 + s2;
                    String s2s1 = s2 + s1;
                    return s2s1.compareTo(s1s2);
                }
            });
            
            if(numsAsStrings[0].equals("0"))                    // for corner case "00"
                return "0";
            
            StringBuilder sb = new StringBuilder();
            
            for(String str : numsAsStrings)
                sb.append(str);
            
            return sb.toString();
        }
    }

    二刷:

    沿用了一刷的方法。但用Lambda就比较慢,可能还是Java编译器的问题。

    Java:

    public class Solution {
        public String largestNumber(int[] nums) {
            if (nums == null || nums.length == 0) return "";
            int len = nums.length;
            String[] strs = new String[len];
            for (int i = 0; i < len; i++) strs[i] = String.valueOf(nums[i]);
            Arrays.sort(strs, (String s1, String s2) -> (s2 + s1).compareTo(s1 + s2));
            if (strs[0].charAt(0) == '0') return "0";
            StringBuilder sb = new StringBuilder();
            for (String str : strs) sb.append(str);
            return sb.toString();
        }
    }

    测试:

  • 相关阅读:
    Lamp环境搭建
    jquery之下拉列表select
    jquery之radio
    php连接postgresql
    ipython的notebook
    python连接postgresql数据库
    django最简单表单入门
    css制作简单下拉菜单
    下拉列表简单操作
    css制作最简单导航栏
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4491655.html
Copyright © 2020-2023  润新知