【剑指offer 面试题12】打印1到最大的n位数
思路:
用n位字符数组表示n位数,通过递归的方式逐层(位)遍历,递归终止时打印。
1 #include "stdio.h" 2 #include "string.h" 3 4 //打印“数字” 5 void printNum(char* number) 6 { 7 //设置前导零状态为开启 8 bool ishead0 = true; 9 for(int i = 0; i < strlen(number); i++) 10 { 11 //遇到第一个非零数,关闭前导零状态 12 if(number[i] != '0' && ishead0 == true) 13 ishead0 = false; 14 //前导零状态关闭下,方可打印数字 15 if(!ishead0) 16 printf("%c", number[i]); 17 } 18 printf("\n"); 19 } 20 21 void print1toNrec(char* number, int len, int index) 22 { 23 //递归终止,打印 24 if(index == len) 25 { 26 printNum(number); 27 return ; 28 } 29 30 //递归执行 31 for(int i = 0; i < 10; i++) 32 { 33 number[index] = '0' + i; 34 print1toNrec(number, len, index + 1); 35 } 36 } 37 38 void print1toN(int n) 39 { 40 if(n <= 0) 41 return ; 42 43 //定义并初始化number数组 44 char* number = new char[n + 1]; 45 memset(number, '0', n); 46 number[n] = '\0'; 47 48 //从number[0]处递归调用 49 for(int i = 0; i < 10; i++) 50 { 51 number[0] = '0' + i; 52 print1toNrec(number, n, 1); 53 } 54 } 55 56 int main() 57 { 58 print1toN(3); 59 }