给定整数n(0<n),求1-n的全排列,例如给定2,全排列为12、21 .给定3,全排列为123、132、213、231、312、321

解决方案 »

  1.   

    懒得写了,搜了一个给你。参考一下:http://blog.csdn.net/sunyujia/article/details/4124011
      

  2.   

    递归,我这里有用C++写的,楼主研究下自己改成java的不懂空间留言问我
    #include<iostream>
    using namespace std;void perm(int list[],int k,int m)
    {
    if(k==m)
    {
    for(int i = 0;i<=m;i++)
    cout<<list[i];
    cout<<endl;
    }
    else
    for(int i = k;i<=m;i++)
    {
    swap(list[k],list[i]);
    perm(list,k+1,m);
    swap(list[k],list[i]);
    }
    }inline void swap(int &a,int &b)
    {
    int temp;
    temp = a;
    a = b;
    b = temp;
    }
    int main()
    {
    int list[]={1,2,3};//楼主稍微把这里改一下这个是1、2、3全排列
    perm(list,0,2); return 0;}
      

  3.   

    /** 
     * 输出全排列所有项 
     *  
     * @author Administrator 
     */  
    public class GroupSort {  
        /** 
         * 0~10之间排列组合所需数组 
         */  
        private static Integer[] base = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
      
        /** 
         * 根据给定大小创建标识数组 
         * @param len 
         */  
        public static void printAll(Integer len) {  
            base = new Integer[len];  
            for (int i = 0; i < len; i++) {  
                base[i] = (i + 1);  
            }  
            check(base, 0, base.length-1);  
        }  
      
        /** 
         * 排列组合 
         * @param base 
         * @param start 
         * @param end 
         */  
        public static void check(Integer[] base, int start, int end) {  
            if (start == end) {  
                System.out.print("[");  
                for (int i = 0; i <= end; i++) {  
                    if(i==end){  
                        System.out.print(base[i]);  
                    }else{  
                        System.out.print(base[i]+",");  
                    }  
                }  
                System.out.println("]");  
            } else {  
                for (int i = start; i <= end; i++) {  
                    Integer temp = base[start];  
                    base[start] = base[i];  
                    base[i] = temp;  
                    check(base, start + 1, end);  
                    temp = base[start];  
                    base[start] = base[i];  
                    base[i] = temp;  
                }  
            }  
        }  
      
        /** 
         * 测试 
         *  
         * @param args 
         */  
        public static void main(String[] args) {  
            //计算量过大,建议测试数据不要超过5  
            //printAll(new java.util.Random().nextInt(10));  
            printAll(3);  
        }  
    }