[轉]LeetCode: 128 Largest Number (自訂比較函數排序)

來源:互聯網
上載者:User

標籤:

題目:

 

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

思路:

貪心演算法:

貪心思路:對於兩個備選數字a和b, 如果str(a) + str(b) > str(b) + str(b), 則a在b之前,否則b在a之前,按照這個原則對原數組從大到小排序即可。我們只需要寫出sort函數的自訂比較函數即可,注意的是,這裡比較函數必須為靜態函數。還有我們,要注意一個特殊情況,如果字串後的字串從0開始,我們返回“0”。

貪心思路是比較簡單的方法,如果我們將數字轉成字串,然後從左至右逐個字元比較,首碼相同的話,還有很多其他情況需要考慮。而利用一個自訂比較函數,對所有字元進行比較,就可以得到正確結果。

首先,我們將num轉成字串存入數組,然後根據自訂比較函數排序,之後再對排序後的字串串連成一個字串,最後排除特殊情況,得到所求結果。

Attention:

1. 注意特殊情況,如果字串開頭含0,最後返回“0”

2. sort中的比較函數compare要聲明為靜態成員函數或全域函數,不能作為普通成員函數,否則會報錯。Line 26: invalid use of non-static member function

因為:非靜態成員函數是依賴於具體對象的,而std::sort這類函數是全域的,因此無法再sort中調用非靜態成員函數。靜態成員函數或者全域函數是不依賴於具體對象的, 可以獨立訪問,無須建立任何對象執行個體就可以訪問。同時靜態成員函數不可以調用類的非靜態成員。

 

//自訂比較函數     static bool compare(string &s1, string &s2)    {        return s1 + s2 > s2 + s1;    }

 

3. sort 比較函數

 

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

比較函數必須在第一個參數被認為小於,等於或大於第二個參數時分別返回一個小於,等於或大於零的整數。以此來表示兩個參數的關係。成功返回true, 失敗返回false.

複雜度:O(nlg(n)) 排序演算法複雜度

AC Code:

 

class Solution {public:    string largestNumber(vector<int> &num) {        vector<string> arr;                //將num轉成string存入數組        for(int i : num)            arr.push_back(to_string(i));                    //比較排序        sort(arr.begin(), arr.end(), compare);                //串連成字串        string ret;        for(string s : arr)            ret += s;                //排除特殊情況        if(ret[0] == ‘0‘ && ret.size() > 0)             return "0";                return ret;    }    private:    //自訂比較函數     static bool compare(string &s1, string &s2)    {        return s1 + s2 > s2 + s1;    }};

 

[轉]LeetCode: 128 Largest Number (自訂比較函數排序)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.