题目分析:[[EVD]] - 剑指 Offer 45. 把数组排成最小的数https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/
简单描述:
- 将非负整数数组中所有数字拼接起来排成一个数,找到最小的那个
限制🚫
- 0 < nums.length <= 100
- 输出结果可能非常大,所以你需要返回一个字符串而不是整数
- 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
示例:
输入: [10,2]
输出: "102"输入: [3,30,34,5,9]
输出: "3033459"
解题思路:
思路:
- #快速排序 对2个数拼接的两种可能作为比较基准,进行排序,然后整体拼起来
效率:
- 时间复杂度
- 空间复杂度
代码:
class Solution
{
public:
string minNumber(vector<int> &nums)
{
vector<string> str;
string res = "";
for (int num : nums)
str.push_back(to_string(num));
sort(str.begin(), str.end(),
[](string &x, string &y)
{return x+y < y+x ; /*若x=30,y=3,则303<330,将x=30排前面*/ });
for (string s : str)
res += s;
return res;
}
};