[LeetCode]Largest Number
来源:互联网 发布:java疯狂讲义第几版好 编辑:程序博客网 时间:2024/06/07 23:28
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.
这道题要求,给定一个数组,将数组中的元素连接在一起,组成更大的数,求能组成的最大的数。由于组成的数可能很大,所以结果用字符串返回。
在解题的过程中,我傻缺了两次/(ㄒoㄒ)/~~。第一次,没正确审题,直接统计出所有数字的频率,然后由大到小拼接,没注意到一个数是不可以拆分的!第二次,不说了,说多了都是泪,直接上图,铭记自己的蠢…
那么正确的解法是什么呢?
一开始想的是,比较直观的若一个数的较高位大于其他数,那么它肯定越靠前。比如9和34比较,9大于3,那么9就应该在34前面。首先我直接将数转换为字符串,然后使用strcmp判断两个字符串的大小来决定谁前谁后,后来发现不对,因为比如3和30,“30”是大于“3”的,但是“303”比“330”小。所以后来就一直陷在多种情况的讨论中。
最后换了个思路,直接比较两个数不同组合的大小,比如比较3和34的先后位置,可以直接比较334和343的大小。然后用这个方法对整个数组进行排序,最后把排好序的数拼接在一起就可以了。
下面贴上代码:
class Solution {public: string largestNumber(vector<int> &num){ string ans; if (num.size() < 1) return ans; stringstream pre, post; for (int i = 1; i < num.size(); i++){ for (int j = 0; j < i; j++){ pre << num[j]; post << num[i]; if (pre.str() + post.str() < post.str() + pre.str()){ int temp = num[i]; num.erase(num.begin() + i); num.insert(num.begin() + j, temp); pre.str(""); post.str(""); break; } pre.str(""); post.str(""); } } for (int k = 0; k < num.size(); k++){ pre << num[k]; ans += pre.str(); pre.str(""); } return ans[0]=='0'?"0":ans; }};
- Largest Number @leetCode
- LeetCode : Largest Number
- Leetcode Largest Number
- [LeetCode] Largest Number
- [leetcode]179 Largest Number
- [LeetCode] Largest Number
- Leetcode Largest Number
- [LeetCode]Largest Number
- leetcode 179: Largest Number
- 【LeetCode】Largest Number
- 【Leetcode】Largest Number
- [LeetCode]179.Largest Number
- LeetCode: Largest Number
- Largest Number|leetcode解决方案
- leetcode 之Largest Number
- [leetcode] Largest Number
- LeetCode(179) Largest Number
- [leetcode]Largest Number
- 【运筹学基础】——预测
- 恒精度频率计的Verlog可综合代码
- Verilog中Task语句可综合设计实例
- Problem 044——UVa 572 - Oil Deposits
- 同源基因查找软件OrthoMCL的使用
- [LeetCode]Largest Number
- HDU 1312 red and black
- Putty Change the Terminal Font
- SPWM控制器的全数字设计
- mave 中pom文件基本配置
- Java开发者易犯错误Top10
- 在Ubuntu 14.04中修改date的显示
- 一个32位DDS的可综合代码
- 欧洲人浅色皮肤源自一万年前一祖先基因突变