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

2021-06-25 13:52:36 字數 1224 閱讀 9534

/*

把陣列排成最小的數:

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

輸入陣列,則列印出這3個數字能排成的最小數字321323

思路:我們應該對於給出的兩個數字m和n,需要確定規則m和n哪個應該排序在前面,而不是比誰大誰小。

m和n能拼成mn或者nm,當mn#include #include #include using namespace std;

const int maxsize = 101;

const int maxlen = 10;

//int compare(const char* str1,const char* str2)

int compare(const void* str1,const void* str2)//qsort比較函式所用形參必須是const void*

void printminnum(int* parr,int ilen)

char** strnumbers = (char**)(new int[ilen]);//經典,這裡定義二級指標,strnumbers是指向字元指標的指標,而字元指標又指向每個字串

for(int i = 0 ; i < ilen ; i++)//對每個字元指標new一下,然後寫入整數

//sort(strnumbers,strnumbers + ilen,compare);//採用我們自定義的比較函式進行比較

qsort(strnumbers,ilen,sizeof(char*),compare);//void qsort(void* buf,size_t num,size_t size,int(*compare)(const void*,const void*)),qsort一半適用於二級字元指標的字元陣列時間比較,sort不行

for(int j = 0 ; j < ilen ; j++)

printf("\n");

for(int k = 0 ; k < ilen ; k++)//注意先刪除一級指標,再刪除二級指標

delete strnumbers;

}void process()

int iarr[maxsize];

for(int i = 0 ; i < n ; i++)

printminnum(iarr,n); }

}int main(int argc,char* argv)

劍指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 把陣列排成最小的數 題目 輸入乙...

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

輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。思路 可以求出這個陣列中所有數字的全排列,然後把每個排列拼起來,最後求出拼起來的數字的最小值。根絕陣列排列組合的思想,n個數字總共有n!個排列。...