剑指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位数]的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer——面试题17:打印从1到最大的n位数

LeetCode | 面试题17. 打印从1到最大的n位数剑指OfferPython

剑指offer 面试17题

乱序版 ● 剑指offer每日算法题打卡题解——分治算法(题号17,14)

《剑指offer》第十七题:打印1到最大的n位数

剑指 Offer 17. 打印从1到最大的n位数