面試題45 把陣列排成最小的數(不會)

2021-08-29 05:23:01 字數 1890 閱讀 4634

一、題目

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