问题描述

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

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

提示:

1 <= nums.length <= 100
0 <= nums[i] <= 109

解题思路:

此题求拼接起来的最大数字,本质上是一个排序问题。设数组 nums中任意两数字的字符串为x 和y ,
则规定排序判断规则为:
  若拼接字符串x+y>y+x,则x大于y,我们可以把x放在前面
  否则,y大于x,我们可以把x放在后面
一旦数组排好了序,最“重要/大”的数字会在最前面
有一个需要注意的情况是如果数组只包含 0 ,我们直接返回结果 0 即可。
否则,我们用排好序的数组形成一个字符串并返回。

实现代码

class Solution {public String largestNumber(int[] nums) {int n=nums.length;/*因为Java提供的比较器的参数必须是对象类型,所以这里需要把nums数组中的元素值都复制Integer中*/Integer onums[]=new Integer[n];for(int i=0;i<n;i++){onums[i]=nums[i];}/*此题求拼接起来的最大数字,本质上是一个排序问题。设数组 nums中任意两数字的字符串为x 和y ,则规定排序判断规则为:若拼接字符串x+y>y+x,则x大于y,我们可以把x放在前面否则,y大于x,我们可以把x放在后面。一旦数组排好了序,最“重要/大”的数字会在最前面。*/Arrays.sort(onums,new Comparator<Integer>(){public int compare(Integer x,Integer y){String sx=String.valueOf(x);        //将数值转换为字符串String sy=String.valueOf(y);String xy=sx+sy;String yx=sy+sx;int n=xy.length();//比较xy和yx的大小,从高位逐位进行比较。如果都一样大,返回0。如果xy大,返回-1,否则返回1for(int i=0;i<n;i++){int a=xy.charAt(i)-'0';int b=yx.charAt(i)-'0';if(a>b){return -1;}else if(a<b){return 1;}else{continue;}}return 0;}});int j;/*有一个需要注意的情况是如果数组只包含 0 ,我们直接返回结果 0 即可。否则,我们用排好序的数组形成一个字符串并返回。*/for(j=0;j<n;j++){if(onums[j]!=0){break;}}if(j==n){return "0";}//使用stringbuffer能提高效率StringBuffer sb=new StringBuffer();//从前往后添加最“大”的数for(int i=0;i<n;i++){sb.append(String.valueOf(onums[i]));}//返回值是String类型return sb.toString();}
}

leetcode题解179-最大数相关推荐

  1. 【LeetCode】179. 最大数

    文章目录 题目[179. 最大数](https://leetcode-cn.com/problems/largest-number/) 解题思路 注意: 步骤: 代码 题目179. 最大数 给定一组非 ...

  2. leetcode 179.最大数

    leetcode 179.最大数 题干 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数. 示例 ...

  3. 算法与数据结构+LeetCode题解-Js版

    LeetCode题解Js版 https://webbj97.github.io/leetCode-Js/ 题外话 LeetCode题解:传送门 前端笔记:传送门 项目背景 旨在提高自己对算法的理解,将 ...

  4. 900 多道 LeetCode 题解,这个 GitHub 项目值得 Star!

    转自 | 码农有道 大家好,我是小 G. 周末风和日丽,适合刷 LeetCode 今天给你们推荐个 GitHub 项目,里面收集了 900 多道 LeetCode 题解,并包含中英文两个版本,适合大多 ...

  5. PHP版Leetcode题解开始随缘更新

    2019独角兽企业重金招聘Python工程师标准>>> PHP版Leetcode题解 我叫skys215,是一名bug工程师. 我接触编程的时间比较早,但是因为我数学不好加上比较懒, ...

  6. [LeetCode 题解]: Binary Tree Preorder Traversal

    前言 [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...

  7. LeetCode 题解汇总

    为什么80%的码农都做不了架构师?>>>    LeetCode 题解汇总 转载于:https://my.oschina.net/michao/blog/801863

  8. leetcode题解【持续更新】

    leetcode题解不断更新,以及nowcoder题解.一起加油! 完整请移步我的Github 转载于:https://juejin.im/post/5c8a73d8f265da2de80fa774

  9. 179. 最大数 golang (自定义sort)

    179. 最大数 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 ...

  10. 32位有符号整数_008. 字符串转换整数 (atoi) | Leetcode题解

    点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

最新文章

  1. SCOM 2012知识分享-26:分布式部署要点总结
  2. 自动化测试8大元素定位之xpath语法
  3. 窗口不小心拉到任务栏下面,窗口无法拖回桌面的解决办法
  4. 如何定义一个有效的OWIN Startup Class
  5. 亚马逊AWS EC2云实例AMI安装LNMP环境(3)——Mysql5.5
  6. C 与 JAVA 的对比分析
  7. 相机标定原理和opencv代码解析
  8. 02_反汇编_反编译
  9. SQL SERVER 只有MDF文件的恢复
  10. vue-router-2-动态路由配置
  11. [Java] Java常见错误
  12. PAT 1083. 是否存在相等的差 (20) - 乙级
  13. 最佳String判断是否为空
  14. Oracle账户的umask,AIX的Umask
  15. Fire! (双bfs+预处理)
  16. 七牛云这个API,让我轻松搞定Banner背景自动切换的功能
  17. Android11以上版本使用高德定位,定位成功,卫星数一直为0
  18. Android 双usb 摄像头支持
  19. 基金什么时候买入好?
  20. c语言中的多线程的实现

热门文章

  1. 携号转网时间明确了: 下半年在全国实施!
  2. 支付宝集五福活动参与人数超4.5亿 你分到了多少?
  3. 学习爬虫过程中遇到的问题总结
  4. ps如何修改图片大小尺寸_如何查看图片尺寸,大小及如何修改图片尺寸—淘宝美工入门课03...
  5. Golang实践录:使用gin框架实现转发功能:一些负载均衡算法的实现
  6. mysql数据库主主_MySQL主主复制(图文详解)
  7. python 加快计算速度_python怎么提高计算速度
  8. 使用base标签后图片无法加载_Spring 源码学习(二)-默认标签解析
  9. mybatisplus查询今天的数据_springboot集成mybatisPlus
  10. python创建一个csv文件_python操作csv文件