劍指offer 把陣列排成最小的數
阿新 • • 發佈:2018-12-11
題目描述 輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。
解析:此題的精髓在與那個排序函式,可以得到較小的組合,最後從前往後加就是答案。
程式碼:
/*這個題目思路:可以將這個陣列的元素看成每個字串,然後對其進行排序,從小到大,所以最重要的是排序規則,所以排序規則為A B 當a+b<b+a的時候就返回a b,例如 31 2 231<312 所以返回2 31 這個排序的cmp很精髓*/ class Solution { public: static bool cmp(int a,int b) { string A="",B=""; A += to_string(a); A += to_string(b); B += to_string(b); B += to_string(a); return A<B; } string PrintMinNumber(vector<int> numbers) { string ans = ""; int len = numbers.size(); if(len==0) return ans; sort(numbers.begin(),numbers.end(),cmp); for(int i=0;i<len;i++) ans += to_string(numbers[i]); return ans; } };