【剑指offer】72.把数组排成最小的数
总目录:
1.问题描述
输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。
1.输出结果可能非常大,所以你需要返回一个字符串而不是整数
2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
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 };