A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何亚辉 中级黑马   /  2016-5-16 23:06  /  288 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class Play4 {
        public static void main(String[] args) {
                        int[] arr = {1,4,7,9,5,3,2};                //给定一个数组
                 int[] x = new int[arr.length];               //定义一个数组,用于接收所有的排列
       
                for (int i =0;i<arr.length ;i++ ) {            //启动一个数字的遍历,并调用递归方法
                        x[0]= arr[i];
                        getAll(arr, x, 0);
                }
        }

public static void  getAll(int[]arr, int[] y , int j){    //一个递归方法,,
               
        int i =0; int[]a =new int[arr.length-1];
for (i =0;i<arr.length ;i++ ) {                         //找出在给定数组里面的一个元素跟第一层循环中得到的数字相等的数字,,记录这个数字的角标
        if (y[j]==arr[i]) {
                break;
        }
}
for (int k =0;k<arr.length-1 ;k++ ) {                //得出一个数组,这个数组的长度比输入的数组小1,   只是去掉了已经取出的那个数字
        if (k<i) {
                a[k]=arr[k];
        }else {
                a[k]=arr[k+1];
                }
}
for (int s =0;s<a.length ;s++ ) {                   //递归...
                        y[j+1] =a[s];
               
                        if (j==arr.length-2) {
                                return;
                        }
                        getAll(a,  y, j+1);
                                for (int t =0;t<y.length ; t++) {               //输出排列
                                System.out.print(y[t]);                               
                        }
                        System.out.println();
                        }       
        }
}


1 个回复

倒序浏览
用递归的方法以不用很长的代码输出任意给定的一串数字的所有排列,,    由于算法缺陷,,,会输出重复的
不过我的问题是,,当数组的个数是奇数的时候,输出正常,但是数组长度是偶数的时候,会 有不知明的错误,,,,平白多出几个0.     
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马