[路飞]_leetcode-179-最大数

简介: leetcode-179-最大数

网络异常,图片无法展示
|


「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战


[题目地址][B站地址]


给定一组非负整数 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


解题思路


本题要求我们重新排列输入输入中数字的顺序,使其拼接后的数字最大。


这里我们先思考只有两个数字的时候,如何判断先后顺序呢?


我们可以比较 a 拼接 b 的结果和 b 拼接 a 的结果哪个更大,如果前者更大,则应该让 ab 的前面,反之则应该让 ba 的前面。


基于以上思考,我们可以把它作为排序的规则,然后利用 sort 排序排序输入数组。


数组排序后我们通过 join 方法获取数字拼接后的字符串即可。


但是到了这里还没有结束,因为输入数据可能存在 [0,0] 的情况,此时转成的字符串表示的数字会有前置 0,我们需要处理这样的情况。


这里可以定义一个指针初始化为下标 0,如果当前字符是 0 的话,让其一直向后移动,找到第一个非 0 位置,然后截取剩余部分即可。这里要注意的是 l 的最大值应该是字符串长度 -2,因为我们要保证结果为非空字符串。


代码实现


var largestNumber = function (nums) {
  // 利用 sort 排序输入数组
  // 排序规则是拼接 a,b,如果 a 拼接 b 后的结果字符串更大,则让 a 在 b 前
  // 否则让 b 在 a 前
  nums.sort((a, b) => (a + '' + b > b + '' + a ? -1 : 1))
  // 利用排序后的数组转成字符串
  const s = nums.join('')
  // 因为会存在 [0,0] 这样的输出数据,所以此时的结果数字可能会有前置 0
  // 初始化 l 指针为 0
  let l = 0
  // 当 l 指针没到字符串的倒数第二位(这里是因为我们要保证结果为非空字符串)
  // 如果当前字符为 0,向后移动 l 指针
  while (l < s.length - 1 && s[l] === '0') l++
  // 返回从 l 指针位置截取之后的结果
  return s.substr(l)
}
复制代码


至此我们就完成了 leetcode-179-最大数


如有任何问题或建议,欢迎留言讨论!👏🏻👏🏻👏🏻

相关文章
|
9月前
|
机器人 API 数据安全/隐私保护
【最佳实践系列】通过AppFlow,支持飞书机器人调用阿里云百炼应用
本文介绍了如何创建并配置飞书应用及机器人,主要包括三个步骤:1. 登录飞书开发者后台,创建企业自建应用并添加机器人卡片和API权限;2. 创建AppFlow连接流,配置飞书平台凭证和阿里云百炼鉴权凭证,发布WebhookUrl,并在飞书开放平台配置事件订阅;3. 将机器人添加到群聊中,通过@机器人实现互动。以及通过AppFlow连接流集成阿里云百炼应用服务。此过程详细描述了从应用创建到机器人添加的全流程,帮助开发者快速集成飞书机器人功能。
1749 10
|
7月前
|
API 数据库 开发者
免费的批量标签制作软件,这几款值得一试
如果你所在团队需要在有限预算下实现批量标签制作、打印和二维码管理,可以优先选择草料二维码(仅需二维码标签的场景)。对于信息化程度较高或有定制需求的企业,也可考虑 BarTender 等商业软件。电商/仓储等需要频繁打印的用户,可以考虑精臣打印机+云打印软件的行驶时,成本更可控
免费的批量标签制作软件,这几款值得一试
|
JavaScript
cnpm 的安装与使用
本文介绍了npm和cnpm的概念、安装nodejs的步骤,以及cnpm的安装和使用方法,提供了通过配置npm使用中国镜像源来加速包下载的替代方案,并说明了如何恢复npm默认仓库地址。
cnpm 的安装与使用
|
数据采集 存储 数据管理
CDGA|如何实施非常精准的数据治理策略?
精准的数据治理需要企业从设定明确目标、制定适应性策略、构建完善组织结构、制定严谨制度流程、采用先进技术工具、加强事前预防、推动数据驱动决策以及建立健全监督与评估机制等多个方面入手。只有这样,企业才能有效应对数据时代带来的挑战,充分释放数据价值,为组织的可持续发展提供有力支撑。
|
Linux TensorFlow 算法框架/工具
安装GPU版本的TensorFlow
【7月更文挑战第3天】安装GPU版本的TensorFlow。
538 1
|
并行计算 Shell 异构计算
win10安装RStudio报错
在Windows 10上安装RStudio 2023.12.0-369后,启动时遇到GPU过程启动失败错误(error_code=18)。系统显示NVIDIA GeForce RTX 4070显卡及CUDA Version 12.4。为解决问题,尝试以`--no-sandbox`参数启动RStudio:`&quot;C:\Program Files\RStudio\rstudio.exe&quot; --no-sandbox`,应用此方法后问题得到解决。
459 0
|
JavaScript 视频直播
【视频直播篇二】vue-cli3集成LivePlayer
本文着重介绍vue-cli3集成LivePlayer
656 0
|
安全 网络安全
Metasploit Pro 4.20.0安装与使用
Metasploit Pro 4.20.0安装与使用
496 0
|
缓存 移动开发 JavaScript
vue核心面试题汇总【查缺补漏】(一)
vue核心面试题汇总【查缺补漏】(一)
213 0

热门文章

最新文章