Largest Number
来源:互联网 发布:邪恶漫画网站源码免费 编辑:程序博客网 时间:2024/06/06 17:08
【题目】
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.
【题意】
给定一个数组,这些数连在一起可以组成一个大数,求能组成最大数。
如 [3, 30, 34, 5, 9] 能组成的最大数为 9534330。
由于组成的数可能非常大,用字符串返回。
【解法】
比较两个数在最终结果中的先后位置,直接比较组合后的数大小?
举个例子:要比较9和51的先后位置,可以比较951和519的大小,而951比519大,所以9应当在前。
这样,有了比较两个数的方法,就可以对整个数组进行排序。然后再把排好序的数拼接在一起就好了。
本题中涉及 INT 和 STRING格式转换问题,可以用C++的sstream函数。
例如:
string s;int n;stringstream sstream;//将int 转 stringsstream<<n;sstream>>s;//将string转intsstream<<s;sstream>>n;
vector 的sort函数的cmp重写,应该写在类外,按照本题要求的cmp
int cmp(int a, int b){ string m = ""; string n = ""; stringstream ostr; ostr<<a; ostr<<b; ostr>>m; ostr.clear(); ostr<<b; ostr<<a; ostr>>n; ostr.clear(); ostr<<m; double r1 ; ostr>>r1; ostr.clear(); ostr<<n; double r2; ostr>>r2; ostr.clear(); return r1 > r2;}
最终算法
class Solution {public: string largestNumber(vector<int>& nums) { string res; sort(nums.begin(),nums.end(),cmp); stringstream ostr; string tmp; for (int i = 0; i < nums.size(); i++) { while(i<nums.size()-1&&nums[i]==0) i++; ostr<<nums[i]; ostr>>tmp; res+=tmp; ostr.clear(); } return res; }};
1 0
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- POJ-1322 Chocolate(生成函数)
- mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用
- 一个少年的魔兽情怀
- HTTPS理论基础及其在Android中的最佳实践
- 使用OpenCV Android SDK从摄像头帧实时检测人脸
- Largest Number
- HDU 5058(set) 5059 (字符串操作)
- BZOJ·人生相关
- 求字符串的所有组合
- Javascript笔记整理 —— 提升
- python模块使用
- <Hadoop>Hadoop 2.7.2 集群安装
- list-style:none;
- UITextField、UITextView、UIWebViewd