zoukankan      html  css  js  c++  java
  • 使用迭代法穷举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

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

  • 相关阅读:
    getopt 命令行参数解析
    Linux下使用indent整理代码
    终端常用快捷键
    gedit 乱码解决
    linux sysrq
    linux下的文件审计功能(audit inotify)
    gdb基本命令
    linux shell 字符截断
    linux 设置时间 date命令
    Ubuntu 时间同步
  • 原文地址:https://www.cnblogs.com/bestwangjie/p/5551250.html
Copyright © 2011-2022 走看看