全排列问题

给定整数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();
    }
}

 

posted @ 2017-04-11 15:05  且听风吟-wuchao  阅读(167)  评论(0编辑  收藏  举报