【LeetCode & 劍指offer刷題】數組題15:45 把數組排成最小的數
阿新 • • 發佈:2019-01-05
coder 所有 持續更新 nlog courier order tco begin 數字
如 2 21 因為 21 2 < 2 21 所以 排序後為 21 2
to_string() 可以將int轉化為string,方便組合後比較,不用管各數的位數
例:
輸入數組{3,32,321}
按這種規則,321 < 32 < 3,則最小數為 321 32 3
O(nlogn)比全排列O(n!)的時間復雜度好
*/
class Solution
{
public:
static bool cmp(int a, int b) //必須定義成static類型才能被sort使用
{
string A = to_string(a) + to_string (b);
string B = to_string(b) + to_string(a);
return A < B;//利用字符串的比較方法
}
string PrintMinNumber(vector<int> numbers)
{
sort(numbers.begin(), numbers.end(), cmp);//用自定義的排序方法從小到大進行排序
string answer;
for(int ai:numbers) answer += to_string(ai);
return answer;
}
};
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)
45 把數組排成最小的數
題目描述
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。 /* 鏈接:https://www.nowcoder.com/questionTerminal/8fecd3f8ba334add803bf2a06af1b993 來源:牛客網 定義新的大小關系,對vector容器內的數據進行排序, 按照 將a和b轉為string後 若 a+b<b+a a排在b之前的規則排序,
【LeetCode & 劍指offer刷題】數組題15:45 把數組排成最小的數