剑指offer--12.打印1到最大的n位数

题目:输入数字n,按顺序打印出从1到最大的n位十进制,eg,输入3,输出1,2,3^999

思考:当输入的n很大的时候,求最大的n位数是不是用整型或者长整型都会溢出?即我们需要考虑大数问题

方法一:在字符串上模拟数字加法,首先把字符串中的每一个数字都初始化为'0',然后每一次为字符串表示的数加1,再打印出来

方法二:全排列思想,如果在数字前面补0,会发现n位所有十进制数其实就是n个从0到9的全排列,我们把数字的每一位从0到9排列一遍,就得到了所有的十进制数,只是在打印的时候,数字排在前面的0不打印出来。用递归,数字的每一位可能是0到9中的一个数,然后设置下一位,递归结束的条件是我们已经设置了数字的最后一位

import java.util.Arrays;

public class wr12OneToN {
	public static void printToMax(int n){
		if(n<=0){
			return ;
		}
//		将字符串中的每个数字初始化为'0'
		char []number=new char[n];
		for(int i=0;i=0;i--){
			int temp=num[i]-'0'+carry;
			if(i==size-1){
				temp++;
			}
			if(temp>=10){
				if(i==0){
					isOverflow=true;
				}
				else{
					temp=temp-10;
					carry=1;
					num[i]=(char)('0'+temp);
				}
			}else{
				num[i]=(char)('0'+temp);
				break;
			}
		}
		return isOverflow;
	}
//	只有在碰到第一个非0的字符后才开始打印,直到字符串的结尾
	public static void printNumber(char[] num){
		int size=num.length;
		
		int i=0;
		while(i

 

你可能感兴趣的:(剑指offer-java实现)