leetcode 179.最大数

题干

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

知识点&算法

目的是使较大的数处在高位,由于数内部不可拆分,所以先总体按照字典序降序排列。
对于拥有共同前缀的数字(譬如8308和830),我们采取贪心策略,用长字符串不断匹配短字符串,直到匹配到不同数字:
1.譬如8339 和 835 , 8 3成功匹配后,左数第三位 3 小于 5,所以将835放在8339之前
2.譬如8399 和 832 , 8 3成功匹配后,左数第三位 9 大于 2,所以将8399放在832之前
3.譬如8308 和 830 , 8 3 0 成功匹配,8 再次从830的最左侧开始也成功匹配,此时我们要检查对于子串830来说,8后面几位是否存在比8更大的数,如果存在,将830 放在 8308之前,如果不存在,将8308放在830之前。
显然这里不存在,所以应组成8308830。相当于是比较匹配掉循环节的部分以后,母串剩下的部分字典序大于循环节还是小于循环节。

另解:
直接在sort里设置贪心策略,对于任两个数的拼接,将拼接字典序大的情况的左侧数排在前。

题解

解:

class Solution {public:string largestNumber(vector<int>& nums) {string ans = "";string as = "",bs = "";bool flag = true;int al = 0,bl = 0;sort(nums.begin(),nums.end(),[&](int a,int b){as = to_string(a);bs = to_string(b);al = as.length();bl = bs.length();if(al == bl) return as > bs;else if(al < bl){int maxIdx = 0;for(int i = 0 ; i < bl ; ++i){if(as[i%al] > as[maxIdx]) maxIdx = i % al;if(bs[i] > as[i%al]) return false;else if(bs[i] < as[i%al]) return true;}if(bl % al <= maxIdx) return true;else return false;}else if(al > bl){int maxIdx = 0;for(int i = 0 ; i < al ; ++i){if(bs[i%bl] > bs[maxIdx]) maxIdx = i % bl;if(as[i] > bs[i%bl]) return true;else if(as[i] < bs[i%bl]) return false;}if(al % bl <= maxIdx) return false;else return true;}else return as > bs;});for(auto i : nums) {ans = ans + to_string(i);if(i != 0) flag = false;}if(flag) return "0";else return ans;}
};

另解:

class Solution {public:string largestNumber(vector<int>& nums) {string ans = "";string as = "",bs = "";bool flag = true;int al = 0,bl = 0;sort(nums.begin(),nums.end(),[&](int a,int b){as = to_string(a);bs = to_string(b);return as + bs > bs + as;});for(auto i : nums){ans = ans + to_string(i);if(i != 0) flag = false;}if(flag) return "0";else return ans;}
};

leetcode 179.最大数相关推荐

  1. LeetCode 179. 最大数(自定义谓词函数--Lambda表达式--排序)

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

  2. leetcode 179. 最大数

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

  3. Leetcode 179. 最大数 解题思路及C++实现

    解题思路: 使用C++中的优先队列priority_queue,通过自定义比较函数cmp,来对nums数组进行排序.最后按排序结果,顺序将nums中的数push_back进字符串res中,即得到结果. ...

  4. leetcode 179. 最大数(排序)

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

  5. leetcode 179 最大数

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

  6. 【LeetCode】179. 最大数

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

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

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

  8. [LeetCode]179. Largest Number

    [LeetCode]179. Largest Number 题目描述 解题思路 求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数 ...

  9. 179. 最大数 largestNumber

    >179. 最大数< >largestNumber< 一.解题思路 1.解法一( Java ) 解法思路:字典序+比较器 首先将 nums 中的数转换成 String 类型,然 ...

最新文章

  1. Waymo向客户发邮件,宣布纯无人驾驶汽车即将上路
  2. python语言标识符首字符不能是_Python语言标识符的命名规定,首字符不能是( )...
  3. MySQL高级 - 锁 - MyISAM表锁 - 查看锁争用情况
  4. c语言第一个mfc程序,c语言之MFC的进程和线程
  5. 普通树与二叉树的相互转化及哈夫曼树的了解
  6. GAN全套学习笔记/论文
  7. 股市心态决定成败:不贪不惧不急不赌
  8. Requests方法 -- 参数关联
  9. 「leetcode」47.全排列 II【回溯算法】详细图解!
  10. 干货分享:vue2.0做移动端开发用到的相关插件和经验总结
  11. 谷粒商城高级篇(39)——认证服务之验证码注册
  12. 沈阳东网科技和福建卓智网络面试心得
  13. IDEA配置JPBC
  14. linux下ace安装教程,linux下安装ACE开发环境
  15. c语言输出方框□怎么回事_C语言打印数据的二进制格式-原理解析与编程实现
  16. 2018年机器视觉产业技术现状、发展趋势分析及发展前景预测
  17. 计算机网络是啥意思啊,kk是什么意思?
  18. 2021高性价比蓝牙耳机榜单,学生党最爱五款平价蓝牙耳机分享
  19. Vue3使用element-plus1.3.0版本的el-menu菜单组件引入动态渲染icon图标时,图标组件刚好是Menu时报错,菜单不显示的解决方法
  20. 访问后端服务 报错504 问题记录

热门文章

  1. 【老卫搞机】136期:华为开发者联盟社区2022年度战码先锋2期开源贡献之星
  2. QSqlDatabase: QMYSQL driver not loaded 解决方案
  3. c语言大作业成绩分析问题,河南科技大学c语言课程设计-综合排序设计报告-成绩分析问题.doc...
  4. 防沉迷与身份证系统挂钩 网游要实名认证
  5. Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案
  6. vmware虚拟机安装windows server 2012 绕过秘钥安装——P2
  7. 音乐 美术 劳技 计算机教研组工作总结,音体美信息教研组工作总结
  8. RPG手机游戏道具、物品、装备表设计
  9. 在XP上同时运行IE6,IE7,IE8,IE9
  10. 华为服务器rh-2286远程控制无法使用