leetcode 179 最大数

image

简单说 就是将数组里的几个数拼起来,组合成最大的数

分析:

实际上就是要排个序,然后组合起来返回
一说排序,就想到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真是妙啊,本质不就是看这俩数,谁在前谁在后嘛。

posted @ 2021-04-12 15:16  抚琴思伯牙  阅读(48)  评论(0编辑  收藏  举报