使用迭代法穷举1到N位最大的数

Posted Learn++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用迭代法穷举1到N位最大的数相关的知识,希望对你有一定的参考价值。

这是何海涛老师剑指offer上面第12题,这题首先注意不能使用整数int型作为操作对象,因为N很大时明显会溢出。这种大数据一般都是使用的字符串来表示。

直接法就是:1.针对字符串的加法,涉及循环进位及跳出判断。

      2.对字符串的打印输出,注意打印01是否合法,否则需添加额外判断。

这题还有一个思路就是,输出这些数其实就是一个n位的全排列。数字的每一位都有0~9这10中可能,这样每次设置完n位接着迭代的设置n+1位。

void PrintArray(char *ptr, int length)
{
    bool flag = false;
    for(size_t i=0; i<length; ++i)
    {
        if(ptr[i] != \'0\' || flag)
        {
            flag = true;
            cout << ptr[i];
    
        }
    }
    cout << endl;
}
void ExhaustiveRecursive(char *ptr, int length, int n)
{
    if (n == length -1)
    {
        PrintArray(ptr, length);
        return ;
    }
    for(size_t i=0; i<10; ++i)
    {
        ptr[n+1] = i+\'0\';
        ExhaustiveRecursive(ptr, length, n+1);
    }
}

void printNMaxRecursive(int n)
{
    if (n == 0)
    {
        return;
    }
    char *number_array = new char[n+1];
    for(size_t i =0; i<10; i++)
    {
        number_array[0] = i+ \'0\';
        ExhaustiveRecursive(number_array, n, 0);
    }
    delete[] number_array;
}
View Code

上面是自己尝试的迭代的方法,没有经过大量的用例测试,仅供参考。

以上是关于使用迭代法穷举1到N位最大的数的主要内容,如果未能解决你的问题,请参考以下文章

循环语句while与for的穷举迭代

穷举迭代03/10

穷举 迭代 while

穷举 迭代 while

迭代法,穷举法及其练习题

迭代法和穷举法