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

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

【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 ;     } };