题目
输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。
思路
- 1到最大的n位十进制数,其实就是n位数字的全排列
- 需要考虑long long不能存放的数字,只能用高精度的思想,也就是用数组存放数字
- 符合正常的交互方式,也就是从第一个非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的写法实在看得一脸蒙蔽=-=- 只要理解了算法,还是自己写吧[逃]