题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
我一开始的思路是这样的,但是没能实现,考虑到具体实现步骤,难度太大。
1.先找首位的数最小的数作为第一个数
2.若是首位数相同,就找第二位最小的数,第二位相等,就找第三位...
后来忽然翻到别人的答案,就是下面这个答案,感觉醍醐灌顶,真的忍不住要说声谢谢
思路:
1,定义一个相加和递增排序的函数(将int型转换成string型,然后判断谁在前谁在后结果会最小)(关键)
2,将原数组变成string型,根据定义的排序方法进行排序
3,将排序后的元素连接在一起
class Solution { public: string PrintMinNumber(vector<int> numbers) { string str; int len = numbers.size(); if(len==0) return str; sort(numbers.begin(), numbers.end(), cmp); for(int i=0;i<len;i++) { str = str + to_string(numbers[i]); } return str; } //不加static会出错 static bool cmp(int a, int b) { string A = to_string(a)+to_string(b); string B = to_string(b)+to_string(a); return A<B; //升序,若A>B则为降序 } };