劍指offer 把陣列排成最小的數(C )

2021-10-06 10:40:44 字數 1462 閱讀 8577

輸入乙個正整數陣列,把陣列裡面所有的數字拼接起來排成乙個數,列印出所有能拼接出的數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字321323。

題解:對於此題,最直觀的方法是對所有的數字進行全排列,然後找出最小的那個數字。另乙個就是對每個數字進行大小排列。

1)大小排列法:

景理兩次遍歷,每次排列i位置,將該位置與後面所有的數字進行拼接,找出所有的不同的拼接,然後就可以尋找出排列以i位置,與後面數字拼接的最小的那個數字,將該數字交換到i位置上。然後得到得到每個位置上的最小數字,然後將每個數字按順序拼接起來,就可以得到最小數字。

例如:3,32,321可以得到:

第乙個位置:

3+32=332;32+3=323;由於323<332,因此順序變為32,3,321

繼續比較,此時:32+321=32321>321+32=32132,因此順序變為321,3,32。

第二個位置:(321,3,32)

323<332,所以順序變為321,32,3

然後按順序進行拼接,即可得到最小數字:321323

**如下:

class

solution}}

for(

int i=

0;i)return res;}}

;

2)全排列法:

利用dfs,深度優先搜尋進行全排列,將排列得到的所有資料進行排序,得到最小的資料。

**如下:`

class

solution

for(

int i=

0;isize()

;i++

)//對每個位置都進行排列

if(mark[i]==0

)return;}

string printminnumber

(vector<

int> numbers)}}

for(int i=0;istring res;

int num=numbers.

size()

;if(num==0)

return res;

if(num==1)

return

to_string

(numbers[0]

);mark=

newint

[num]

; seat=

newint

[num]

;dfs

(numbers)

;//dfs法進行全排列

sort

(s.begin()

,s.end()

);//排序

res=s[0]

;delete

mark;

delete

seat;

return res;}}

;

劍指offer 把陣列排成最小的數

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 5 題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。解析 比大小即可,不過比的時候是從從左往右比。注意到字母長度有...

劍指offer 把陣列排成最小的數

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 將int型的陣列轉化為string型的陣列,再將string型的陣列排序,排序規則依據比較兩個string變數相加後的大小 注意這個cmp...

劍指offer 把陣列排成最小的數

題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。分析 題目要求比較整數陣列組成後的數的大小,在int及long中來處理很容易超出範圍,實際上大數問題一般放在字串中來處理。我們把陣列元素兩...