题目描述:
给定一个数字N,打印从1到最大的N位数
此题需要注意以下几点:
1. 涉及到大数问题,因为并没有限定 n的取值范围,所以需要采取 字符数组模拟大数运算
2. 打印数字时 需要忽略前置0
3. 我们始终 以n位数为整体,n位所有十进制数其实是 n位从0到9的全排列,可以采用递归解决
我们从 数组下标0开始 (对应于数字最高位),每一位都有0到9取值,然后设置下一位,递归的结束条件是 设置位到了数组的最末端
1 void PrintNum(char* num)
2 {
3 char* cur = num;
4 while (*cur == ‘0‘) {
5 ++cur;
6 }
7 if (cur != num + strlen(num)) {
8 fprintf(stdout, "%s\n", cur);
9 }
10 }
11
12 void Print(char* num, int len, int index)
13 {
14 if (index == len) {
15 PrintNum(num);
16 return;
17 }
18
19 for (int i = 0; i < 10; ++i) {
20 num[index] = i + ‘0‘;
21 Print(num, len, index + 1);
22 }
23 }
剑指offer (12) 打印1到最大的n位数
时间: 2024-11-11 14:09:16