使用迭代法穷举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

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

posted @ 2016-06-01 22:00  BestWangJie  阅读(275)  评论(0编辑  收藏  举报