剑指offer第二版——面试题17(java)

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

题目描述: 
输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999

【注意】:n的范围,当n超过long long的范围时,应该如何处理——大数

方法一:

用字符串或者数组的方式来表达大数

方法二:

转换为数字排列的解法,用递归来解决问题

如果在数字前面补0,则n位所有十进制数其实是n个从0~9的全排列——把数字的每一位都从0~9排列编,就得到了所有的十进制数,在打印时,在数字前面的0不做打印

用【递归】来表示全排列,数字的每一位都可能是0~9中的一个数,然后设置下一位

import java.util.Scanner;

public class Q17 {
	public static void main(String[] args) {
		System.out.println("your input:");
		int n = 0;
		Scanner scanner = new Scanner(System.in);
		if(scanner.hasNextInt()==true) {
			n = scanner.nextInt();
		}
		if(n<=0) {
			System.out.println("wrong input");
		}else {
			show1toN(n);
		}
	}
	
	public static void show1toN(int n) {
		//初始化stringbuffer
		StringBuffer sb = new StringBuffer(n);
		for(int i=0;i

 

你可能感兴趣的:(剑指offer第二版)