把数组排成最小的数

来源:互联网 发布:淘宝上的佳德凤梨酥 编辑:程序博客网 时间:2024/06/03 06:53

刚开始做这道题时没有理解算法的含义,搞了好久才发现是理解偏了,主要原因是我没有理解透sort函数里比较函数的作用,它相当于是按程序员的需求重新定义比较规则,比如这道题就是要重定义比较整数a和b的比较规则,即:若ab >ba, 则 a > b; 否则 a < b。算法实现过程我就不赘述了,直接上代码(我在牛客网实现的):

class Solution {public:/*思路: 将数组中的数按定义的排序方式进行排序,即:若ab >ba, 则 a > b; 否则 a < b;将排完序的数字串成一个字符串输出即所求。*/    string PrintMinNumber(vector<int> numbers) {        string res = "";        if(numbers.empty())            return res;        sort(numbers.begin(), numbers.end(), cmp);  //排序                int len = numbers.size();                for(int i = 0; i < len; i++)   //连接            res += to_string(numbers[i]);        return res;    }        static bool cmp(int a, int b)   //重定义比较器    {        string str1 = to_string(a) + to_string(b);  //to_string可以将整数转换为字符串,+为string类库函数,将字符串连接起来        string str2 = to_string(b) + to_string(a);        return str1 < str2;  //通过比较ab和ba的大小,对a和b进行升序排列    }};
要注意的是,比较器函数要定义为static类型,因为其作为类的成员函数时,默认拥有一个this指针,这样和sort函数所需要使用的排序函数类型不一样,会报错。

0 0