【剑指offer】把数组排成最小的数

原创博文,转载请注明出处!
本题牛客网地址

博客文章索引地址

博客文章中代码的github地址

# 题目

image

# 思路

1.排序

      寻找数组元素排序规则,使得数组根据这个规则排序之后,数组元素能排成一个最小的数。排序规则如下:

  • 若ab > ba, 则 a 大于 b,
  • 若ab < ba ,则 a 小于 b,
  • 若ab = ba ,则 a 等于 b;

2.拼接

      给出数字m和n,怎么得到数字mn和nm并比较两者大小?如果使用数字计算,容易出现拼接后数字超过int能表达的范围。《剑指offer》中解决办法是把数字转换成字符串,使用字符串表示拼接后的数字,并比较拼接后数字的大小。

# 代码

  1 class Solution {
  2 public:
  3     string PrintMinNumber(vector<int> numbers)
  4     {
  5         string res;
  6         if(numbers.size() == 0) return "";
  7 
  8         // 排序
  9         sort(numbers.begin(), numbers.end(), cmp);
 10 
 11         // 拼接
 12         for(int i = 0; i < numbers.size(); ++i)
 13             res += to_string(numbers[i]);
 14 
 15         return res;
 16     }
 17 private:
 18     // 升序排序
 19     static bool cmp(int a, int b){
 20         string A = to_string(a) + to_string(b);
 21         string B = to_string(b) + to_string(a);
 22         return A < B;
 23     }
 24 };
posted @ 2018-04-15 11:03  wanglei5205  阅读(238)  评论(0编辑  收藏  举报
levels of contents