面试题45 把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: “102”
示例 2:
输入: [3,30,34,5,9]
输出: “3033459”
排个序就可以了。
class Solution {
public:
static int cmp(int a, int b){
string sab = to_string(a) + to_string(b);
string sba = to_string(b) + to_string(a);
return sab<sba;
}
string minNumber(vector<int>& nums) {
sort(nums.begin(), nums.end(), cmp);
string ans="";
for(int i=0; i<nums.size(); i++){
ans += to_string(nums[i]);
}
return ans;
}
};
中途遇到一个错误提示为:
reference to non-static member function must be called: sort(numbers.begin(), numbers.end(), cmp);
在我写的这段代码中,sort(nums.begin(), nums.end(), cmp)中第三个参数是一个函数指针,然而cmp函数是一个非静态成员函数,非静态成员函数指针和普通函数指针是有区别的,然而静态成员函数指针和普通函数指针没有区别。
因为非静态成员函数指针有一个隐形的指针参数:
bool cmp(Solution* this, int a, int b)
所以将cmp的定义改成是静态即可:
static bool cmp(int a, int b);