剑指Offer(第二版)面试题17:打印从1到最大的n位数
2017-12-25 22:49
459 查看
剑指Offer(第二版)面试题17:打印从1到最大的n位数
输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,打印1,2,3一直到最大的3位数即999。
思路
如果面试题是关于n位的整数并且没有限定n的取值范围,或者输入任意大小的整数,那么这道题目很有可能是需要考虑大数问题的。字符串是一种简单、有效表示大数的方法。代码
在字符串上模拟数字加法的解法,绕过陷阱。如何快速判断在增加了1过后,是否到达了最大的n位数是本题的一个小陷阱。bool Increment(char* number) { bool isOverflow = false; int nTakeOver = 0; int nLength = strlen(number); for (int i = nLength - 1; i>=0; i--) { int nSum = number[i] - '0' + nTakeOver; if(i == nLength - 1) nSum++; if(nSum >= 10) { if(i == 0) isOverflow = true; else { nSum -= 10; nTakeOver = 1; number[i] = '0' + nSum; } } else { number[i] = '0' + nSum; break; } } return isOverflow; }
把问题转换位数字排列的解法,递归让代码更简洁
#include <iostream> using namespace std; void Print1ToMaxOfNDigits(int n); void Print1ToMaxOfN 4000 DigitsRecursively(char* number, int length, int index); void PrintNumber(char* number); int main() { int n; cin >> n; while(n != -666) { Print1ToMaxOfNDigits(n); cin >> n; } return 0; } void Print1ToMaxOfNDigits(int n) { if(n <= 0) return; char* number = new char[n + 1]; memset(number,'0',n); number = '\0'; for(int i = 0; i < 10; ++i) { number[0] = '0' + i; Print1ToMaxOfNDigitsRecursively(number,n,0); } return; } void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index) { if(index == length - 1) { PrintNumber(number); return; } for(int i = 0; i < 10; ++i) { number[index + 1] = '0' + i; Print1ToMaxOfNDigitsRecursively(number,length,index + 1); } return; } void PrintNumber(char* number) { bool isBeginning0 = true; int len = strlen(number); for(int i = 0; i < len; ++i) { if(isBeginning0 && number[i] != '0') isBeginning0 = false; if(!isBeginning0) { cout<<number[i]; } } if(!isBeginning0) cout<<'\t'; return; }
相关文章推荐
- 《剑指offer》面试题17:打印从1到最大的n位数
- 剑指offer面试题12:打印1到最大的n位数
- 《剑指Offer》面试题12:打印1到最大的n位数
- (剑指Offer)面试题12:打印1到最大的n位数
- 剑指Offer面试题12[打印1到最大的n位数]
- 剑指Offer-面试题12:打印1到最大的n位数
- 剑指Offer_面试题12_打印1到最大的n位数
- 剑指Offer面试题12(Java版):打印1到最大的n位数
- 剑指Offer 面试题17:打印从1到最大的n位数 Java代码实现
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
- 剑指offer面试题12:打印1到最大的n位数(1)
- 《剑指Offer》学习笔记--面试题12:打印1到最大的n位数
- 剑指Offer学习之面试题12 :打印1 到最大的n 位数
- 剑指offer--面试题17:打印从1到最大的n位数
- 【剑指offer】面试题17:打印从1到最大的n位数
- 剑指offer-面试题12.打印1到最大的n位数
- 剑指Offer 面试题12:打印1到最大的N位数 题解
- 剑指offer面试题12-打印1到最大的n位数
- 剑指offer面试题12 使用BigInteger来实现 打印1到最大的n位数
- 《剑指Offer》面试题12:打印1到最大的n位数