剑指offer:把数组排成最小的数

来源:互联网 发布:svd矩阵标准化 编辑:程序博客网 时间:2024/06/18 17:13

题目描述

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


#include<string>using namespace std;class Solution {public:    string PrintMinNumber(vector<int> numbers) {        int size = numbers.size();        vector<string> strnumbers;                //全部转化为字符串        for(auto n:numbers)            strnumbers.push_back(to_string(n));                    //对所有字符串进行排序,从小到大        for(int i=1; i<size; ++i)        {            int j=i;            string temp = strnumbers[i];            while(j>=1 && compare(temp,strnumbers[j-1]))            {                 strnumbers[j] = strnumbers[j-1];                 --j;            }            strnumbers[j] = temp;        }                //将所有字符串连在一起输出        string output = "";        for(auto str:strnumbers)            output += str;                return output;    }        //确定两个数字的先后顺序,关键点    bool compare(string a, string b)    {        string ab = a + b;        string ba = b + a;        if(ab > ba)            return 0;//b放前面        else            return 1;//a放前面    }};


0 0
原创粉丝点击