剑指offer——47把数组排成最小的数

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
 
题解:
  这与PAT中最小排列组合是同理的,为了防止新组成的数字溢出,全部转化为字符串操作。
  
 1 class Solution {
 2 public:
 3     string PrintMinNumber(vector<int> numbers) {
 4         if (numbers.size() == 0)return "";
 5         vector<string>v;
 6         for (auto a : numbers)
 7             v.push_back(to_string(a));
 8         sort(v.begin(), v.end(), [](string a, string b) {return a + b < b + a; });
 9         string res = "";
10         for (auto s : v)
11             res += s;
12         while (res.size() > 0 && res[0] == '0')
13             res.erase(0, 1);
14         return res;
15     }
16 };

 

posted @ 2019-10-17 21:53  自由之翼Az  阅读(110)  评论(0编辑  收藏  举报