一、題目
輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這3個數字能排成的最小數字321323。
二、關鍵
三、解釋
1.解題思路:如果兩個數字m和n能後拼接成數字mn和nm。如果mn2.相加得到大數的解決思路:將數字轉換成字串。拼接得到的mn和nm,他們的位數肯定相同,因此比較他們的大小,只需要按照字串大小的比較規則就可以。
四、**
#include "cstdio"
#include #include int compare(const void* strnumber1, const void* strnumber2);
// int型整數用十進位制表示最多只有10位
const int g_maxnumberlength = 10;
char* g_strcombine1 = new char[g_maxnumberlength * 2 + 1];
char* g_strcombine2 = new char[g_maxnumberlength * 2 + 1];
void printminnumber(const int* numbers, int length)
qsort(strnumbers, length, sizeof(char*), compare);
for(int i = 0; i < length; ++i)
printf("%s", strnumbers[i]);
printf("\n");
for(int i = 0; i < length; ++i)
delete strnumbers[i];
delete strnumbers;}
// 如果[strnumber1][strnumber2] > [strnumber2][strnumber1], 返回值大於0
// 如果[strnumber1][strnumber2] = [strnumber2][strnumber1], 返回值等於0
// 如果[strnumber1][strnumber2] < [strnumber2][strnumber1], 返回值小於0
int compare(const void* strnumber1, const void* strnumber2)
// ********************測試**********************
void test(const char* testname, int* numbers, int length, const char* expectedresult)
void test1()
; test("test1", numbers, sizeof(numbers)/sizeof(int), "12345");
}void test2()
; test("test2", numbers, sizeof(numbers)/sizeof(int), "321323");
}void test3()
; test("test3", numbers, sizeof(numbers)/sizeof(int), "321233233");
}void test4()
; test("test4", numbers, sizeof(numbers)/sizeof(int), "111111");
}// 陣列中只有乙個數字
void test5()
; test("test5", numbers, sizeof(numbers)/sizeof(int), "321");
}void test6()
int main(int argc, char* argv)
面試題45 把陣列排成最小的數 Golang
我們這一屆也即將面臨著找工作的難題了,為了提公升程式設計功力,我經常上leetcode和牛客網刷題。認真反省之後發現這就是近幾天學習狀態越來越差的罪魁禍首。對於大多數普通人來講,秋招是一場持久戰,保持乙個健康的心態至關重要。因此學習中的正反饋真的很重要,寧願刷點簡單的題也不要一味求難。今天整了幾道l...
leetcode 面試題45 把陣列排成最小的數
解題思路 這道題的關鍵就在於如何重新定義排序規則,對待排序的字串x和y,如果 x y 構成的字串小於 y x 構成的字串,自然x應當排在y前面,反之亦然 class solution def minnumber self,nums list int str defcmp x,y if x y y x...
劍指 面試題45 把陣列排成最小的數
題目 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。0 nums.length 100 思路 1 自定義排序規則comp 然後呼叫內建排序函式。2 將int轉換成字串,再執行字串拼接操作,最後比較它們只用根據字串大小的比較規則比較即可,因為ab和ba位數...