【劍指offer】17、打印從1到最大的n位數
阿新 • • 發佈:2018-07-20
++ lse style ret char bsp 大數問題 要求 dig
題目
輸入數字n,按順序打印從1到最大n位的十進制數。比如輸入3,打印1到999。
思路
輸入的數字可以很大,可以是33,65,這樣的話int和long long都不能滿足題目要求,所以這是一個大數問題。
大數問題經常用字符串來解決
我們當然可以用字符串來模擬加法
最方法的方法應該是做一個n位的全排列,每位可以取0~9
void Print1toMaxOfNDigits(int n){ if (n <= 0) return; char* number = new char[n+1]; number[n]=‘\0‘; for (int i = 0; i < 10; i++) { number[0] = i + ‘0‘; Print1ToMaxOfNDigitsRecursively(number,n,0); } delete[] number; } 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] = i + ‘0‘; Print1ToMaxOfNDigitsRecursively(number, length, index + 1); } } void PrintNumber(char* Number){ bool isBegin = true; int nLength = strlen(number); for (int i = 0; i < nLength; i++) { if (isBegin && number[i] != ‘0‘) isBegin = false; if (!isBegin) printf("%c", number[i]); } printf("\t"); }
【劍指offer】17、打印從1到最大的n位數