程序员面试题精选100题(41)-把数组排成最小的数(算法)

面试题 时间:2019-09-22 手机网站
n都在int能表达的范围内,但把它们拼起来的数字mnnm就不一定能用int表示了。所以我们需要解决大数问题。一个非常直观的方法就是把数字转换成字符串。

另外,由于把数字mn拼接起来得到的mnnm,它们所含有的数字的个数肯定是相同的。因此比较它们的大小只需要按照字符串大小的比较规则就可以了。

基于这个思路,我们可以写出下面的代码:

// Maxinum int number has 10 digits in decimal system

const int g_MaxNumberLength = 10;

 

// String buffers to combine two numbers

char* g_StrCombine1 = new char[g_MaxNumberLength * 2 + 1];

char* g_StrCombine2 = new char[g_MaxNumberLength * 2 + 1];

 

// Given an array, print  the minimum number

// by combining all numbers in the array

void PrintMinNumber(int* numbers, int length)

{

    if(numbers == NULL || length <= 0)

        return;

 

    // Convert all numbers as strings

    char** strNumbers = (char**)(new int[length]);

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

    {

        strNumbers[i] = new char[g_MaxNumberLength + 1];

        sprintf(strNumbers[i], "%d", numbers[i]);