输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
1 class Solution { 2 public: 3 static bool cmp(int a,int b) 4 { 5 string str1 = to_string(a)+to_string(b); 6 string str2 = to_string(b)+to_string(a); 7 return str1<str2; 8 } 9 string PrintMinNumber(vector<int> numbers) { 10 int len = numbers.size(); 11 if(len==0)return ""; 12 sort(numbers.begin(),numbers.end(),cmp); 13 string res; 14 for(int i=0;i<len;i++) 15 { 16 res += to_string(numbers[i]); 17 } 18 return res; 19 20 21 } 22 };
这里cmp用了static的原因:sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。 因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。
原文:https://www.cnblogs.com/chaoza1/p/10890651.html