剑指Offer12打印1到最大的n位数
2014-08-15 21:34
225 查看
题目:
输入一个数字n,按顺序打印出从1最大的n位十进制数。比如输入3,打印出1,2,3,一直到最大的3位数即999.
注意陷阱:n位数,可能是int型盛不下的数,所以需要用大数来模拟。
有两种方法,一种就是大数模拟,每次加1,然后输出。
还有一中就是利用全排列,把其想成n位数的全排列,每一位数是从0到9的全排列。
方法1
Increament(num)这个函数就是控制每次加1的,但是有一个问题,就是咱们需要判断是否到达了最大n位数,最先想到的就是逐个位置进行比较,但是这样的时间复杂度就太高了,所以在Increament()函数中进行了处理,就是只有当最高位得到进位的时候才返回一个true,这样就不需要打印了
方法2代码:
输入一个数字n,按顺序打印出从1最大的n位十进制数。比如输入3,打印出1,2,3,一直到最大的3位数即999.
注意陷阱:n位数,可能是int型盛不下的数,所以需要用大数来模拟。
有两种方法,一种就是大数模拟,每次加1,然后输出。
还有一中就是利用全排列,把其想成n位数的全排列,每一位数是从0到9的全排列。
方法1
void Print1ToLastDigist(int n) { if (n<0) return ; char *num = new char ; memset(num,'0',n); num = '\0'; while(!Increment(num)) PrintNum(num); }
Increament(num)这个函数就是控制每次加1的,但是有一个问题,就是咱们需要判断是否到达了最大n位数,最先想到的就是逐个位置进行比较,但是这样的时间复杂度就太高了,所以在Increament()函数中进行了处理,就是只有当最高位得到进位的时候才返回一个true,这样就不需要打印了
bool Increment(char *num) { bool IsOverFlover = false; int TakeOver = 0; int nlength = strlen(num); for(int i= nlength-1;i>= 0;i--) { int sum = num[i]-'0'+TakeOver; if(i == nlength-1) sum++; if(sum >= 10) { TakeOver = 1; if(i==0) IsOverFlover = true; else { sum = sum - 10; num[i] = sum + '0'; } } else { num[i] = '0'+sum; break; } } return IsOverFlover; }然后是输出函数,这里需要说明的是如果高位是0的话,就不用输出了,只从第一个不是0的数开始往外输出
方法2代码:
void PrintNum(char *num) { int nlength = strlen(num); int i; for(i=0;i<=nlength-1;i++) { if(num[i] != '0') break; } for(;i<=nlength-1;i++) cout<<num[i]; cout<<"\t"; }
void Print1ToMaxOfN(char *num,int length,int index) { if(index == length-1) { PrintNum(num); return ; } for(int i=0;i<10;i++) { num[index + 1] = i + '0'; Print1ToMaxOfN(num,length,index+1); } } void Print1ToLastDigistFangFa2(int n) { if(n<0) return ; char *num = new char ; num = '\0'; for(int i=0;i<10;i++) { num[0] = i + '0'; Print1ToMaxOfN(num,n,0); } delete []num; }
相关文章推荐
- 剑指offer12:打印1到最大的n位数
- 【面试题】剑指offer12--打印1到最大的n位数
- 《剑指offer12——打印1到最大的n位数》
- (3)打印1到最大的n位数
- 打印1到最大的n位数
- 数据结构-打印1到最大的n位数
- 07 打印1到最大的n位数
- 【剑指Offer面试编程题】题目1515:打印1到最大的N位数--九度OJ
- 面试杂题(九)打印一到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数。
- 面试题12: 打印1到最大的n位数v
- 打印1到最大的n位数
- 打印从1到最大的n位数
- 面试算法(十一)打印1到最大的n位数
- 大数问题:打印从1到最大的n位数
- java打印从1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 算法题21 打印1到最大的n位数