1. 程式人生 > >【LeetCode & 劍指offer刷題】數組題15:45 把數組排成最小的數

【LeetCode & 劍指offer刷題】數組題15:45 把數組排成最小的數

coder 所有 持續更新 nlog courier order tco begin 數字

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)

45 把數組排成最小的數

題目描述

輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字為321323。 /* 鏈接:https://www.nowcoder.com/questionTerminal/8fecd3f8ba334add803bf2a06af1b993 來源:牛客網 定義新的大小關系,對vector容器內的數據進行排序, 按照 將a和b轉為string後 若 a+b<b+a a排在b之前的規則排序,
如 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刷題】數組題15:45 把數組排成最小的數