免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

算法日常・每日刷题--<贪心>3

算法日常・每日刷题--<贪心>3 179. 最大数 - 力扣LeetCode179. 最大数 - 给定一组非负整数 nums重新排列每个数的顺序每个数不可拆分使之组成一个最大的整数。注意输出结果可能非常大所以你需要返回一个字符串而不是整数。 示例 1输入nums [10,2]输出210示例 2输入nums [3,30,34,5,9]输出9534330 提示 * 1 nums.length 100 * 0 nums[i] 109https://leetcode.cn/problems/largest-number/题目描述给定一组非负整数nums重新排列每个数的顺序每个数不可拆分使之组成一个最大的整数。注意输出结果可能非常大所以你需要返回一个字符串而不是整数。解题思路这道题的核心难点我们不能直接按照数字大小排序。 例如数字3和30单纯数字大小303拼接对比330 330303 303330 303所以实际应该把3放在30前面。核心比较规则 对于两个数字字符串x、y如果拼接结果xy大于yxx应该排在y的前面。否则y排在x前面。利用std::sort自定义比较器按照这个拼接规则完成排序最后把所有字符串拼接。边界坑输入全为 0例如[0,0]拼接得到00必须特殊处理返回0。class Solution { public: static bool compare(string x, string y) { if (x y y x) return true; return false; } string largestNumber(vectorint nums) { vectorstring ret; int n nums.size(); for (auto e : nums) { ret.push_back(to_string(e)); } sort(ret.begin(), ret.end(), compare); string ans; for (auto e : ret) ans e; if(ans[0]0) return 0; return ans; } };
返回列表