輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。
思路:可以求出這個陣列中所有數字的全排列,然後把每個排列拼起來,最後求出拼起來的數字的最小值。根絕陣列排列組合的思想,n個數字總共有n!個排列。還有更快的方法,乙個非常直觀的辦法就是把數字轉換為字串。由於把數字m和n拼接起來得到nm和mn,他們的位數肯定是相同的,因此比較他們的大小只需要按照字串大小的比較規則就可以了。
用sort實現時,需要自定義比較規則函式。因為我們比較的不是輸入的兩個字串a和b,而是ab和ba兩種組合的大小。
這種規則的有效性劍指offer上面給出了詳細的證明。
class solution
sort(vec.begin(),vec.end(),comp);
string result;
for(int i=0;i
劍指Offer 面試題33 把陣列排成最小的數
把陣列排成最小的數 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接處的所有數字中的最小的乙個。例如 輸入陣列,則列印出這3個數字能排成的最小數字321323 思路 我們應該對於給出的兩個數字m和n,需要確定規則m和n哪個應該排序在前面,而不是比誰大誰小。m和n能拼成mn或者nm,...
劍指offer 面試題33 把陣列排成最小的數
題目 輸入乙個正整數陣列,把陣列裡面的所有數字連線起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印這三個數字能排成的最小數字321323。基本思想 o nlogn 兩個數字m和n能拼接數字mn和nm。如果mn 如對321和32,排序為32132 32321,所以321 32 ...
劍指Offer之面試題33 把陣列排成最小的數
所有 均通過g 編譯器 測試,僅為練手紀錄。面試題33 把陣列排成最小的數 題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出所有數字中最小的乙個。例如輸入陣列 3,32,321 則列印出這 3個數字能排成的最小數字 321323.面試題33 把陣列排成最小的數 題目 輸入乙...