【剑指offer 面试题12】打印1到最大的n位数

时间:2023-03-08 17:25:01

思路:

  用n位字符数组表示n位数,通过递归的方式逐层(位)遍历,递归终止时打印。

 #include "stdio.h"
#include "string.h" //打印“数字”
void printNum(char* number)
{
//设置前导零状态为开启
bool ishead0 = true;
for(int i = ; i < strlen(number); i++)
{
//遇到第一个非零数,关闭前导零状态
if(number[i] != '' && ishead0 == true)
ishead0 = false;
//前导零状态关闭下,方可打印数字
if(!ishead0)
printf("%c", number[i]);
}
printf("\n");
} void print1toNrec(char* number, int len, int index)
{
//递归终止,打印
if(index == len)
{
printNum(number);
return ;
} //递归执行
for(int i = ; i < ; i++)
{
number[index] = '' + i;
print1toNrec(number, len, index + );
}
} void print1toN(int n)
{
if(n <= )
return ; //定义并初始化number数组
char* number = new char[n + ];
memset(number, '', n);
number[n] = '\0'; //从number[0]处递归调用
for(int i = ; i < ; i++)
{
number[] = '' + i;
print1toNrec(number, n, );
}
} int main()
{
print1toN();
}