刚开始做这道题时没有理解算法的含义,搞了好久才发现是理解偏了,主要原因是我没有理解透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函数所需要使用的排序函数类型不一样,会报错。