题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。
样例
Input:[3, 32, 321]
Output:321323
解题思路
-
描述
这个题目有一个十分巧妙的做法。
我们对该数组从小到大排序即可,但是这个排序不是普通意义上的排序,需要自定义。
我们定义的排序是这样的: a < b ⇔ a b ‾ < b a ‾ a < b \Leftrightarrow \overline{ab} < \overline{ba} a<b⇔ab<ba
我们很容易知道,排好序的数字串成字符串就是最小数字。
-
实现代码:
static bool cmp(int a,int b) { string str1 = to_string(a),str2 = to_string(b); return str1 + str2 < str2 + str1; } string printMinNumber(vector<int>& nums) { sort(nums.begin(),nums.end(),cmp); string res; for(int i=0;i<nums.size();i++) { res += to_string(nums[i]); } return res; }