j劍指offer面試題 33 把陣列排成最小的數

2021-08-04 05:39:22 字數 480 閱讀 3156

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為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 把陣列排成最小的數 題目 輸入乙...