leetcode 179 最大数
简单说 就是将数组里的几个数拼起来,组合成最大的数
分析:
实际上就是要排个序,然后组合起来返回
一说排序,就想到std::sort
关键是怎么比?
其实要获得最大数,这个最大的数进行to_string得到的字典序也会是最大的!
这么一来就很好办了,就把两数的to_string结果正反相加,比较最大值。
bool compare(int a,int b)
{
string aa = to_string(a);
string bb = to_string(b);
return aa+bb>bb+aa;
}
利用这个函数进行比较,就能得到一个从大到小的数组。
再遍历数组把这些数转string拼接起来就得到答案
说到这里,这个函数这里这样写其实效率很低的,快排里会有很多次比较,每次比较进行两次to_string,有点浪费,可以选择预先把nums的值全部放到vector<string>里面来,再对这个容器进行sort,那现在的比较函数就是bool campare(const string& a,const string& b)
说实话,自己做的时候也立马想到写比较函数这里了,可惜就是想复杂了,明明已经转成string了,却还是选择用下标一个一个的比,比着比着情况一多,就容易错逻辑
这个return aa+bb>bb+aa真是妙啊,本质不就是看这俩数,谁在前谁在后嘛。