问题描述

179. 最大数 (Medium)

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 10⁹

解题思路

贪心,将数组转化为字符串数组,然后如果s1 + s2 >= s2 + s1,那么就保证s1一定在s2的前面,利用该规则自定义排序,同时要注意对数组中元素全为0的特殊条件的判断。

代码

class Solution {
public:
string largestNumber(vector<int> &nums) {
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != 0) {
sum += nums[i];
break;
}
}
// 对数组元素全为0的特殊情况的判断
if (sum == 0) {
return "0";
}
vector<string> tmp;
for (int &num : nums) {
tmp.push_back(std::to_string(num));
}
// 自定义排序,确保如果s1 + s2 > s2 + s1,那么s1一定在s2前面
auto cmp = [&](string &s1, string &s2) {
return s2 + s1 <= s1 + s2;
};
std::sort(tmp.begin(), tmp.end(), cmp);
string res;
for (auto &s : tmp) {
res += s;
}
return res;
}
};

最新文章

  1. UITableView heightForHeaderInSection遇到的坑
  2. (原创)MongoDB之NoSQL简介
  3. MFC 使用位图按钮,并且设置按钮的鼠标悬停效果
  4. 记一次在Linux上面启动部署在tomcat服务器的程序
  5. JQuery 表单校验插件 validate 使用纪录
  6. Docker run命令详解 转
  7. 一、HTML和CSS基础--网页布局--实践--导航条菜单的制作
  8. G面经prepare: Reorder String to make duplicates not consecutive
  9. 《zw版&#183;Halcon-delphi系列原创教程》 3d汽车模型自动区域分割
  10. JSAPI_Ticket签名
  11. 分布式锁1 Java常用技术方案(转)
  12. 迷你MVVM框架 avalonjs 0.82发布
  13. 浅谈MAIC 2016第二届移动应用(APP)创新大会
  14. 虚拟机网络配置详解(NAT、桥接、Hostonly)
  15. qmake 提示 Failure to open file:****
  16. Java入门篇(五)——Java的字符串/String类
  17. C++语言之构造函数
  18. jsp+servlet include引入文件指令
  19. 框架中的导航框架 &amp; position定位
  20. Java多线程系列——计数器 CountDownLatch

热门文章

  1. [python] 基于NetworkX实现网络图的绘制
  2. 用 Python 脚本实现电脑唤醒后自动拍照 截屏并发邮件通知
  3. ES6 中 Promise对象使用学习
  4. 手撕AVL树(C++)
  5. win32com操作word API精讲 第六集 Range(四)对齐和缩进
  6. 手把手教大家写书写一个Mqtt网关
  7. 9月23日内容总结——pycharm的安装与使用、python语法规范与注释、变量和常量、索引取值以及部分数据类型简介
  8. Python中的函数定义中的斜杠/和星号*
  9. Django-request、django连接数据库、ORM
  10. 1 .NET Core笔试题