您的位置:首页 > 其它

每天一道LeetCode-----将数值数组按一定顺序拼接,使得拼接的结果最大

2018-02-25 12:58 363 查看

Largest Number

原题链接Largest Number



给定一个数值数组,将数组中的数值按照一定顺序拼接在一起,使得拼接的结果值最大

思路:

将原数值数组转为字符串数组,方便拼接和比较

将字符串数组排序

从头到尾拼接结果

难点在如何对字符串数组排序,为了使结果最大,可以得知需要将数字打的排到前面,以图片为例,

9的数字最大,所以排在第一位

随后是5,排在第二位

对于3,30,34而言,通过比较可以看到34330这样可以得到最大值

对于第三步,如何比较高位相等的一些数字呢(如3,30,34),如果以30和34为例,排序的结果无非是

30在34的前面

34在30的前面

这两种,所以就把这两种结果比较即可,即判断3034和3430的大小关系从而确定30和34的先后位置

代码如下

class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> strs(nums.size());
auto it = nums.begin();
/* 生成字符串数组 */
std::generate(strs.begin(), strs.end(), [&it]{
return std::to_string(*(it++));
});
/* 排序 */
std::sort(strs.begin(), strs.end(), [](auto& lhs, auto& rhs){
return lhs + rhs > rhs + lhs;
});
/* 拼接 */
auto result = std::accumulate(strs.begin(), strs.end(), string(""), [](auto& res, auto& str) {
return res + str;
});
/* 去除前缀0 */
return (result.empty() || result.front() == '0') ? "0" : result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode
相关文章推荐