剑指offer[面试题17:打印从1到最大的n位数]
Posted nicetoseeyou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer[面试题17:打印从1到最大的n位数]相关的知识,希望对你有一定的参考价值。
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的三位数999.
思路:
隐藏考点:当输入的n很大时,用整型(int)或者长整型(long int)求最大的n位数都会溢出。也就是需要考虑大数问题。
用递归实现全排列,数字(用字符串容器装)的每一位都是0~9中的一个数,然后设置下一位。递归结束的条件是已经设置了数字的最后一位。
class Solution public: void PrintMaxOfDigits(int n) if (n <= 0) return; vector<char> number(n,0); for (int i = 0; i < 10; i++) number[0] = i + ‘0‘; // int+char得到char类型的0-9 printRecursively(number, n, 0); // 最好以地址形式传入,vector<char> &number void printRecursively(vector<char> &number, int length, int index) if (index + 1 == length) printNumber(number); return; for (int i = 0; i < 10; i++) number[index + 1] = i + ‘0‘; printRecursively(number, length, index + 1); void printNumber(vector<char> &number) int sum = 0; for (int i = 0; i < number.size(); i++) sum = sum * 10 + (number[i]-‘0‘); cout << sum << endl; ;
以上是关于剑指offer[面试题17:打印从1到最大的n位数]的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode | 面试题17. 打印从1到最大的n位数剑指OfferPython