LeetCode(179) Largest Number
题目如下:
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
分析如下:
先看几个例子
eg1. [0, 0, 0 , 0] -> 0
eg2. [1211, 12] -> 121211而不是121112。
所以可以考虑排序,而排序的根据(也就是比较函数的比较原理)不是这些数的值的相对大小,而是它们构成新的数的大小比较。
所以,虽然1211 > 12, 但是
"1211" + "12" = "121112",
“12” + "1211" = "121211",
"121112" < "121211"
所以从构成新的数的角度来看, "1211" < "12" 。
我的代码:
//13ms
struct {bool operator()(string a, string b){string c1 = a + b;string c2 = b + a;return c1 > c2;}
} compareDigits;class Solution {
public:string largestNumber(vector<int> &num) {if (num.size() == 0) return "";vector<string> num_str;for (int i = 0; i < num.size(); ++i) {num_str.push_back(to_string(num[i]));}std::sort(num_str.begin(), num_str.end(), compareDigits);string res1 = "";for (int i = 0; i < num_str.size(); ++i)res1 += num_str[i];if (res1[0] == '0')return "0";elsereturn res1;}
};
小结扩展:
1 比较函数的写法,注意比较函数中的等号的处理。
一开始的错误写法如下,
struct {bool operator()(string a, string b){string c1 = a + b;string c2 = b + a;for (int j = 0; j < c1.length(); ++j) {if (c1[j] < c2[j])return false;else //错误,这里的else必须只能表示">"不能表示">=" 。因为这里的比较函数是对"<"写的。"="和">"都是false。return true;}return false;}
} compareDigits;
修改后为,
struct {bool operator()(string a, string b){string c1 = a + b;string c2 = b + a;for (int j = 0; j < c1.length(); ++j) {if (c1[j] < c2[j])return false;else if (c1[j] > c2[j])return true;}return false; //"="的case, 因为operator()表示小于,所以">" 或者 "="都为false;}
} compareDigits;
再简化一下,就是。
struct {bool operator()(string a, string b){string c1 = a + b;string c2 = b + a;return c1 > c2;}
} compareDigits;
2 另外一种思路。
上面的思路是O(NlgN),下面看另外一种思路虽然是O(N²), 但也不错,挑玉米算法。
class Solution {
public:string largestNumber(vector<int> &num) {string str = "";while(!num.empty()){int n = num.size(); int j = 0;int vv = num[j];for(int i=1;i!=n;i++){int uu = num[i];uu = num[i];vv = num[j];if(uu != vv)if(to_string(uu)+to_string(vv)>to_string(vv)+to_string(uu)){j=i; //j保持当前的"最大"string, "最大"在这里不是指它本身最大,而是指,如果它能够合成最大的数。}}str += to_string(num[j]);num.erase(num.begin()+j);}while(str[0]=='0'&&str.size()>1) str.erase(str.begin());return str;}
};
LeetCode(179) Largest Number相关推荐
- [LeetCode]179. Largest Number
[LeetCode]179. Largest Number 题目描述 解题思路 求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数 ...
- Leetcode 179 Largest Number
Leetcode 179 Largest Number 题目 思路 代码 优化 题目 Given a list of non negative integers, arrange them such ...
- [LeetCode]179.Largest Number
[题目] Given a list of non negative integers, arrange them such that they form the largest number. For ...
- [leetcode]179 Largest Number
问题描述: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...
- [leetcode] 179 Largest Number
拿到这个题的第一个想法是 将int转换成string,然后按照string的比较规则,但是发现 13<3<34这种不好处理. 那么何不我们直接比较下两者的组合,取其较大的呢,由此自定义优 ...
- LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字
2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2.题目地址 https://leetco ...
- 179 Largest Number
题目链接:https://leetcode.com/problems/largest-number/ 题目: Given a list of non negative integers, arrang ...
- largest number java_将给定的数组组成最大的数 Largest Number
问题: Given a list of non negative integers, arrange them such that they form the largest number. For ...
- LeetCode——Kth Largest Element in an Array
LeetCode--Kth Largest Element in an Array Question Find the kth largest element in an unsorted array ...
最新文章
- python3.6.1安装教程-在Linux上安装Python3.6.1
- [学习笔记]树上莫队
- 怎么计算开学第几周php,如何计算开学第几周, 要求每年通用
- 在html页面中加入矢量图,HTML5画布矢量图形?
- ASP.NET MVC动态加载数据
- 为sharepoint 2013 增加切换账户登陆菜单
- 腾讯视频中如何把视频进行收藏
- 深度学习——第一次浪潮、寒冬及解冻
- React Native :加载新闻列表
- 联网生活方式下,消费者的7大关键需求
- lua与python结合_从Python到Lua
- 【优化求解】基于matlab改进的遗传算法求解考虑环境效益DG优化问题【含Matlab源码 1483期】
- C语言深度剖析-----数组基础
- 信贷风控四:高校地址自动化识别
- 【从蛋壳到满天飞】JS 数据结构解析和算法实现-链表
- 「游戏引擎 浅入浅出」项目介绍
- 【教程篇】Blender实例教程(一)——制作一个酷炫的三叶草星
- KANO模型以及产品经理的素质模型
- java B2B2C源码电子商务平台-配置中心svn示例和refresh
- android商城首页布局,Android使用分类型RecyclerView仿各大商城首页