全排列问题
给定整数n,依次输出1,2,3,……直到n位最大整数。
比如n=2,输出应该是:1,2,3,……,98,99
这道题中如果ntebie大,则不能使用数字来表示,因为可能会溢出。因此需要使用数组来表示。
当n=2时,用数组array={0,0}来表示可能的值。则array可能的情况有{0,0},{0,1},{0,2},……,{0,9},……{9,9}
可以看出这是一个全排列问题。
数组的每一位都有10种情况{0,1,2,3,4,5,6,7,8,9}。因此我们使用递归来做全排列。
代码:
/** * Created by wuchao on 17-3-29. */ import java.util.*; public class test { public static void main(String[] args) { printN(3); } public static void printN(int n){ char[] array = new char[n]; //初始化 for(int i=0;i<n;i++){ array[i]='0'; } for(int i=0;i<10;i++){ array[0]= (char)('0'+i); printNRecu(array,0); } } public static void printNRecu(char[] array,int index){ //最后一位已经赋值后,打印该数组 if(index==array.length-1){ printArray(array); return; } //递归修改下一个元素 for(int i=0;i<10;i++){ array[index+1]=(char)('0'+i); printNRecu(array,index+1); } } //打印数组,从第一个非0开始打印,因为整数的第一位非零 public static void printArray(char[] array){ int index=0; for(;index<array.length;index++){ if(array[index]!='0') break; } if(index==array.length) return; for(int i=index;i<array.length;i++) { System.out.print(array[i]); } System.out.println(); } }
联系方式:wuchaodzxx@126.com