輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
我的思路是按照每一位比較數字的大小,進行排序,但這對於數量級不同,某些數字相同的數來說不能、滿足題意,因此參考了網上的教程。
網上的教程先將陣列排序,但是按照正常的排序方法顯然不行,因此自定義了排序函式,根據字串的大小來排序。此處涉及到sort函式的一些應用。
如何實現比較函式cmp:
若比較函式不填,則預設按照從小到大的順序排列。
如果想要從大到小排列可以這樣寫比較函式:
bool
cmp(
int a,
int b)
關於本題,核心也是如何重寫cmp函式,本題是要是按照字串拼接後數字最小,因此可以這麼寫cmp函式:
static
bool
cmp(
int a,
int b)
class
solution
string printminnumber
(vector<
int> numbers)
};
劍指offer 把陣列排成最小的數
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 5 題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。解析 比大小即可,不過比的時候是從從左往右比。注意到字母長度有...
劍指offer 把陣列排成最小的數
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 將int型的陣列轉化為string型的陣列,再將string型的陣列排序,排序規則依據比較兩個string變數相加後的大小 注意這個cmp...
劍指offer 把陣列排成最小的數
題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 題目要求比較整數陣列組成後的數的大小,在int及long中來處理很容易超出範圍,實際上大數問題一般放在字串中來處理。我們把陣列元素兩...