題目描述:
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{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;
}
};