求 1 到最大的 n 位数

输入数字n,按顺序打印出从1到最大n位的十进制数字,比如输入3,打印1,2,3,4,,,一直到最大的三位数即999。


思路,这题看上去不难,但是需要注意的有两点,首先如果n位数很大,超出了int或者long表示的范围怎么办,因此我们选择把数字存放在数组里面,然后使用全排列的类似方法来求出n位数的所有可能性。第二个需要注意的是打印的时候,最前面的0是不用打印的,直到遇到第一位不是0的数我们才打印。

       public static void process(int n){
		int[] arr=new int[n];
		if(n<=0)
			return ;
		process( arr, 0);
	}
	public static void process(int[] arr,int n){
		if(n==arr.length){
			print(arr);
			System.out.println();
			return ;
		}
		for(int i=0;i<10;i++){
			arr[n]=i;
			process(arr,n+1);
		}
	}
	public static void print(int[] arr){
		boolean isBegin0=false;//是不是开始的0
		for(int i=0;i<arr.length;i++){
			if(arr[i]!=0){
				if(isBegin0==false)  isBegin0=true;
				System.out.print(arr[i]);
			}
			else{
				if(isBegin0){
					System.out.print(arr[i]);
				}
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		process(2);
	}

猜你喜欢

转载自blog.csdn.net/qq_35590091/article/details/108424621