把數組排成最小的數

 

題目:輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。

分析:對vector容器內的數據進行按照 將a和b轉爲string後 若 a+b<b+a  a排在在前 的規則排序,如 2 21 因爲 212 < 221 所以 排序後爲 21 2 ,排序後數組中的元素按照要求排好序,然後直接按照字符串連接將所有元素連接起來, 另外to_string() 可以將int 轉化爲string。還有需要注意的是,如果cmp函數是成員函數的話,要通過對象來調用,但是如果作爲sort的第三個參數直接傳遞的話,要將cmp函數定義爲static成員函數,它不需要通過對象來調用。

static bool cmp(int a, int b)
    {
        string s1;
        string s2;
        
        //s1+s2(拼接)
        s1+=to_string(a);
        s1+=to_string(b);
        
        //s2+s1(拼接)
        s2+=to_string(b);
        s2+=to_string(a);
        
        return s1<s2;//排升序
    }
    
    string PrintMinNumber(vector<int> numbers) {
        int len=numbers.size();
        string ret;
        if(len<=0)
            return ret;
        
        //排序(按照拼接起來從小到大)
        sort(numbers.begin(), numbers.end(), cmp);
        
        //輸入拼接後的值(已經按照升序拍好了)
        for(int i=0;i<len;i++)
        {
            ret+=to_string(numbers[i]);
        }
        return ret;    
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章