使用迭代法穷举1到N位最大的数
这是何海涛老师剑指offer上面第12题,这题首先注意不能使用整数int型作为操作对象,因为N很大时明显会溢出。这种大数据一般都是使用的字符串来表示。
直接法就是:1.针对字符串的加法,涉及循环进位及跳出判断。
2.对字符串的打印输出,注意打印01是否合法,否则需添加额外判断。
这题还有一个思路就是,输出这些数其实就是一个n位的全排列。数字的每一位都有0~9这10中可能,这样每次设置完n位接着迭代的设置n+1位。
void PrintArray(char *ptr, int length) { bool flag = false; for(size_t i=0; i<length; ++i) { if(ptr[i] != '0' || flag) { flag = true; cout << ptr[i]; } } cout << endl; } void ExhaustiveRecursive(char *ptr, int length, int n) { if (n == length -1) { PrintArray(ptr, length); return ; } for(size_t i=0; i<10; ++i) { ptr[n+1] = i+'0'; ExhaustiveRecursive(ptr, length, n+1); } } void printNMaxRecursive(int n) { if (n == 0) { return; } char *number_array = new char[n+1]; for(size_t i =0; i<10; i++) { number_array[0] = i+ '0'; ExhaustiveRecursive(number_array, n, 0); } delete[] number_array; }
上面是自己尝试的迭代的方法,没有经过大量的用例测试,仅供参考。
learn++