Largest Number

来源:互联网 发布:debian centos arm 编辑:程序博客网 时间:2024/04/28 13:02

这道题的关键在于找到一个巧妙的比较函数。

在论坛里看到某位大神的经典之作,代码如下:

class Solution {public:    string largestNumber(vector<int> &num) {        vector<string> arr;        for(auto i:num)            arr.push_back(to_string(i));        sort(begin(arr), end(arr), [](string &s1, string &s2){ return s1+s2>s2+s1; });        string res;        for(auto s:arr)            res+=s;        while(res[0]=='0' && res.length()>1)            res.erase(0,1);        return  res;    }};
上述代码用了许多c++11的新特性,可以查阅相关资料了解。

巧妙的地方在于两点:

1.认识到这里直接用数字比较是不合适的,而用字符串形式比较正好符合要求。我之前就是傻傻的将两个数字究竟有几位整理出来,然后再从高位向低位比较,多了不必要的麻烦。

2.通过s1+s2>s2+s1这样巧妙的比较方式进行比较,注意到每次考虑第n个数字时,之前考虑的n-1个数字已经摆放到位,因此只需要局部最大即可得到全局最大。

0 0
原创粉丝点击