剑指offer-打印1到最大的n位数

题目

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

思路

  1. 1到最大的n位十进制数,其实就是n位数字的全排列
  2. 需要考虑long long不能存放的数字,只能用高精度的思想,也就是用数组存放数字
  3. 符合正常的交互方式,也就是从第一个非0的位置开始输出

AC代码

#include <iostream>
using namespace std;
#define maxsize 100

char number[maxsize];
void print(char *number) //从第一个不为0的位置开始输出
{
    int flag = 0;
    for (int i = 0; i < maxsize; i++)
    {
        if (flag == 0 && number[i] != '0')
            flag = 1;
        if (flag == 1)
            cout << number[i];
    }
    cout << endl;
}

void print_number(char *number, int index, int n) //递归生成--本质实现全排列
{
    if (n <= 0)   //特殊输入处理
        return;
    if (index == n)
    {
        print(number);
        return;
    }

    for (int i = 0; i < 10; i++)
    {
        number[index] = i + '0';
        print_number(number, index + 1, n);
    }
}

int main()
{
    print_number(number, 0, 3);
    return 0;
}

总结

  • 书上剑指offer的写法实在看得一脸蒙蔽=-=
  • 只要理解了算法,还是自己写吧[逃]
发布了29 篇原创文章 · 获赞 6 · 访问量 439

猜你喜欢

转载自blog.csdn.net/weixin_42100456/article/details/104044569