当前位置: 代码迷 >> Java相关 >> 问一个算法问题(我个人感觉不是很简单)
  详细解决方案

问一个算法问题(我个人感觉不是很简单)

热度:114   发布时间:2010-05-21 11:31:52.0
问一个算法问题(我个人感觉不是很简单)
问题很简单,给出1到n   n个整数,请把这些数的所有出现顺序可能列出来。比如:n=9,即把1到9九个数的所有出现顺序情况列出来。可能是123456789,也可能是654123987或其它情况,总之要求全部列出来。请大家思考思考,锻炼大家的思维!
搜索更多相关的解决方案: 算法  感觉  

----------------解决方案--------------------------------------------------------
程序代码:
import java.util.*;

public class Permutation {
    public int  count=0;   //统计总共排列数
    public void  permutate(String[] array,int i,int j){  //排列递归算法,排列下标从i--j
        if(i>j){             //下标i大于j说明已完成一次排列      
            count++;
            for(int k=0;k<array.length;k++){
                System.out.print(array[k]+"  ");
            }
        System.out.println();
        }else{                        //否则分别将i--j的数据与下标为i的位置交换数据,构成前缀,再全排列i+1---j的
            for(int x=i;x<array.length;x++){
                swap(array,i,x);
                permutate(array,i+1,j);
                swap(array,x,i);  //一种情况完成,要恢复
            }
        }
    }

    public void swap(String[] array,int m,int n){
        String t;
        t=array[m];
        array[m]=array[n];
        array[n]=t;
    }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.print("n=?");
        int n = in.nextInt();
        String[] test = new String[n];
        for(int i=0;i<n;i++) {
            test[i] = ""+(i+1);
        }
        Permutation permutation = new Permutation();
        permutation.permutate(test,0,n-1); //从下标0--n-1
        System.out.println("总共有"+permutation.count+"种排列");
    }
}


[ 本帖最后由 lampeter123 于 2010-5-22 14:01 编辑 ]
----------------解决方案--------------------------------------------------------
漂亮!我也找了很久了,谢谢楼上的 还有楼主
----------------解决方案--------------------------------------------------------
  相关解决方案