【剑指offer】72.把数组排成最小的数

总目录:

算法之旅导航目录

 

1.问题描述

输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。
1.输出结果可能非常大,所以你需要返回一个字符串而不是整数
2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
数据范围:
0<=len(numbers)<=100
 

2.问题分析

 先排序后迭代即可

排序使用什么排序算法都行,由于可能存在溢出所以不适合数字A和数字B组合起来的AB或BA作数值比较,而是转为字符串之后进行大小比较。


3.代码实例

重载sort函数进行排序

 1 class Solution {
 2 public:
 3     //重载排序比较方式
 4     static bool cmp(string& x, string& y){
 5         //叠加
 6         return x + y < y + x;
 7     }
 8     string PrintMinNumber(vector<int> numbers) {
 9         string res = "";
10         //空数组的情况
11         if(numbers.size() == 0)
12             return res;
13         vector<string> nums;
14         //将数字转成字符
15         for(int i = 0; i < numbers.size(); i++)
16             nums.push_back(to_string(numbers[i]));
17         //排序
18         sort(nums.begin(), nums.end(), cmp);
19         //字符串叠加
20         for(int i = 0; i < nums.size(); i++)
21             res += nums[i];
22         return res;
23     }
24 };
View Code

 

posted @ 2022-12-06 17:44  啊原来是这样呀  阅读(27)  评论(0编辑  收藏  举报