1. 程式人生 > >劍指Offer-把陣列排成最小的數

劍指Offer-把陣列排成最小的數

題目描述

輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。

演算法思路

1、定義字串比較函式compare

2、將整數陣列轉化成字串陣列,利用氣泡排序,得到排序後的字串陣列。


class Solution {
public:
    bool compare(string a, string b){
        string c,d;
        c.append(a);
        c.append(b);
        d.append(b);
        d.append(a);
        return c > d;
    }
    string PrintMinNumber(vector<int> numbers) {
        vector<string> snumbers;
        string res;
        if(numbers.size() == 0)
            return res;
        for(int i = 0; i < numbers.size(); ++i){
            stringstream ss;
            ss<<numbers[i];
            snumbers.push_back(ss.str());
        }
        for(int i = 0; i < snumbers.size(); ++i){
            for(int j = 0; j < snumbers.size()-i-1; ++j){
                if(compare(snumbers[j],snumbers[j+1])){
                    swap(snumbers[j],snumbers[j+1]);
                }
            }
        }
        for(int i = 0; i < snumbers.size(); ++i){
            res.append(snumbers[i]);
        }
        return res;
    }
};