剑指Offer算法实现之十二:打印1到最大的n位数

来源:互联网 发布:手机淘宝上怎么开网店 编辑:程序博客网 时间:2024/06/06 05:45

题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印1、2、3一直到最大的3位数字即999.

思路:
① 考虑大数字,采用数组模拟自增运算
② 也可考虑使用基于数组的全排列,使用递归实现

编译环境:ArchLinux+Clang3.3,C++

实现一:数组自增模拟

#include <iostream>#include <cstring>using namespace std;void print1ToMaxNDgts(int n){    if (n <= 0) return;    char *ptr = new char[n]; // char is byte, 节省空间。还有其他方法更加节省空间,如位域    memset(ptr, 0, n);    bool done = false;    ptr[n-1] = 1; // 从1开始打印    while (!done) {        int i = 0;        while (!ptr[i]) i++;        for (; i < n; i++) { // 打印            cout <<(int) ptr[i];        }        cout << endl;        for (i = n - 1; i >= 0; i--) { // 模拟递增操作            ptr[i] += 1;            if (ptr[i] > 9) {                if (i == 0) {                    done = true;                    break;                }                ptr[i] = 0;            } else {                break;            }        }    }}int main(){    print1ToMaxNDgts(2);}