把数组排成最小的数★★★
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
开始自己在想的时候,也试着将两个字符串比如321和32进行比较,发现32132比32321小,还在思考321放在前面和32放在前面怎么判断大小~~~ o(╯□╰)o 这脑子~~~~
只需要自定义排序规则即可,将所有的数字按照A+B < B+A的排序规则排序,那么最前面的就是跟其他字符串拼起来最小的。整个自定义有序的拼起来就是最后的结果。
class Solution { public:
//自定义排序规则 static bool cmp(string str1, string str2){ string str12 = str1 + str2; string str21 = str2 + str1; return str12 < str21; } string PrintMinNumber(vector<int> numbers) { vector<string>str; for(int i = 0; i < numbers.size(); i++){ strstream ss; string tmpstr; ss << numbers[i]; ss>>tmpstr; str.push_back(tmpstr); } sort(str.begin(), str.end(), cmp); string resstr; for(int i = 0; i < str.size(); i++){ resstr.append(str[i]); } return resstr; } };
学学学 练练练 刷刷刷