剑指Offer- 把数组排成最小的数

题目描述 [把数组排成最小的数]

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

解题思路

1.将数组自定义排序compare(x,y),排序规则如下:

  • 将数组分别拼接成字符串xy和yx;
  • return xy=y;
  1. 依次连接排序后的数组

代码

class Solution {
public:
    string PrintMinNumber(vector numbers) {
        sort(numbers.begin(), numbers.end(),
            [](int x, int y){
                string xy_str = to_string(x).append(to_string(y));
                string yx_str = to_string(y).append(to_string(x));
                return xy_str < yx_str;
             }
        );

        string s;
        for(auto num:numbers)
            s.append(to_string(num));
        return s;
    }
};

你可能感兴趣的:(剑指Offer- 把数组排成最小的数)