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

题目描述

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

将数字转化为字符串,然后对字符串进行快速排序

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
     string r;
     vector<string> sr;
     for(int i=0;i<numbers.size();i++){
      sr.push_back(numberToString(numbers[i]));
     }
     sort(sr.begin(),sr.end(),compare);
     for(int i=0;i<sr.size();i++){
      r += sr[i];
     }
  return r;  
    }

    string numberToString(int n) {
     return (n>9?numberToString(n/10):"")+char(n%10+'0');
    }

    static bool compare(const string& a, const string& b){
     return a+b<=b+a;
    } 
};

你可能感兴趣的:(剑指offer,牛客网,把数组排成最小的数)