zoukankan      html  css  js  c++  java
  • 179.最大数

    题目

    给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

    注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

    示例 1:

    输入:nums = [10,2]
    输出:"210"

    示例 2:

    输入:nums = [3,30,34,5,9]
    输出:"9534330"

    示例 3:

    输入:nums = [1]
    输出:"1"

    示例 4:

    输入:nums = [10]
    输出:"10"

    排序

    首先将int数组转化为String数组。一般而言,是要优先把字典序较大的字符串加入到结果字符串中,但是如果一个字符串是另一个字符串的开头就不一定了。比如a="432",b="43"时,应该优先加入"43",因为43432>43243,那么如果出现这种情况就先比较a+b和b+a的字典序。如果a+b的字典序更大则优先加入a,否则优先加入b。
    因此只要定义一个排序规则将优先加入结果字符串的字符串排到前面,最后依次取出即可拼接出最终结果。

     public String largestNumber(int[] nums) {
            String[] s=new String[nums.length];
            for(int i=0;i<nums.length;++i) s[i]=Integer.toString(nums[i]);
            //定义排序规则
            Comparator<String> comparator=new Comparator<>(){
                public int compare(String a,String b){
                    for(int i=0;i<a.length()&&i<b.length();++i){
                        if(a.charAt(i)>b.charAt(i)) return -1;
                        else if(a.charAt(i)<b.charAt(i)) return 1;
                    }
                    if(a.length()==b.length()) return 0;
                    else return compare(a+b,b+a);
                }
            };
            Arrays.sort(s,comparator);
            StringBuilder sb=new StringBuilder(new String(""));
            for(String str:s) sb.append(str);
            return sb.charAt(0)=='0'?"0":sb.toString();
      }
    

    原题:179.最大数

  • 相关阅读:
    JS语法转换-ES6转ES5
    百度编辑器的初步使用
    github使用的小坑 处理
    关于input的检验问题
    一些代码规范(收集)
    jquery源码解析日常
    重操JS旧业第九弹:函数表达式
    重操JS旧业第八弹:面向对象与继承
    重操JS旧业第七弹:面向对象与对象创建
    重操JS旧业第六弹:基本类型包装
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/14652724.html
Copyright © 2011-2022 走看看