码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-06-01 23:12:01      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

这是何海涛老师剑指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位最大的数

标签:

原文地址:http://www.cnblogs.com/bestwangjie/p/5551250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!