劍指Offer-把陣列排成最小的數
阿新 • • 發佈:2019-02-02
題目描述
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{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; } };