本文主要是介绍剑指 Offer(第2版)面试题 45:把数组排成最小的数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
剑指 Offer(第2版)面试题 45:把数组排成最小的数
- 剑指 Offer(第2版)面试题 45:把数组排成最小的数
- 解法1:排序
剑指 Offer(第2版)面试题 45:把数组排成最小的数
题目来源:58. 把数组排成最小的数
解法1:排序
两个数字 m 和 n 能拼接数字 mn 和 nm,排序规则为:如果 mn < nm,就把 m 排在 n 的前面;否则,把 m 排在 n 的后面。
如何拼接数字?
当 m 和 n 都很大时,拼接出来的数字会超过 int 能表达的范围,但把它们拼接成字符串就没问题了,拼接得到的 mn 和 nm 的位数一定相同,因此比较它们的大小只需要按照字符串大小的比较规则即可。
代码:
class Solution
{
private:static bool cmp(const int num1, const int num2){string s1 = to_string(num1), s2 = to_string(num2);return s1 + s2 < s2 + s1;}public:string printMinNumber(vector<int> &nums){string ans;if (nums.empty())return ans;sort(nums.begin(), nums.end(), cmp);for (const int &num : nums)ans += to_string(num);return ans;}
};
复杂度分析:
时间复杂度:O(nlogn),其中 n 是数组 nums 的长度。
空间复杂度:O(1)。
这篇关于剑指 Offer(第2版)面试题 45:把数组排成最小的数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!