1. 程式人生 > >劍指offer 把陣列排成最小的數

劍指offer 把陣列排成最小的數

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