劍指Offer(牛客版)--面試題45:把數組排成最小的數

題目描述:

 

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

 

分析:

 

 

完整代碼:

 

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        //聲明一個變量 lenght 來獲取 numbers 的個數
        int length = numbers.size();
        //聲明一個變量 strNumbers ,用來存放 char 類型數組
        string strNumbers = "";
        //檢查輸入的合法性
        if(numbers.empty() || length  <= 0)
            return strNumbers;
        //聲明一個字符串容器,用來存放
        vector<string> array;
        //遍歷整個數組的元素
        for(int i = 0; i < length; ++i)
            //將 numbers 中的元素壓入到 array 中
            array.push_back(to_string(numbers[i]));
        // 將 array 中的元素,以確定的順序排列
        sort(array.begin(), array.end(), compare);
        
        //將 array 中的數字壓入到strNUmbers 中
        for(int j = 0; j < array.size(); ++j)
            strNumbers.append(array[j]);
        //返回最小的數
        return strNumbers;
        
    }

private:
    //比較兩個字符串的大小
    static bool compare(string strNumbers1, string strNumbers2)
    {
        //聲明一個字符串變量,將 strNumbers1 的元素複製到 Strcombine1 中
        string Strcombine1 = strNumbers1;
        //將 strNumbers2 的元素連接到 Strcombine1 的尾部
        Strcombine1.append(strNumbers2);

        //聲明一個字符串變量,將 strNumbers2 的元素複製到 Strcombine2 中
        string Strcombine2 = strNumbers2;    
        //將 strNumbers1 的元素連接到 Strcombine2 的尾部
        Strcombine2.append(strNumbers1);
            
        //比較 Strcombine1 和 Strcombine2 的大小
        return Strcombine1 < Strcombine2;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章