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
原创粉丝点击