ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

179.最大数

2021-04-13 13:34:41  阅读:200  来源: 互联网

标签:优先 String 最大数 nums int 示例 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.最大数

标签:优先,String,最大数,nums,int,示例,179,字符串
来源: https://www.cnblogs.com/Frank-Hong/p/14652724.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有