java实现 数组元素全排列

public class test {

 //传入原数组;
 int[] a;
 
 //数组长度,即个数;
 final int N;
 
 //第三方原数组常量;
 final int[] temp;
 
 //记录每一层的上一层初始排列;
 int[][] b;
 
 //记录排列组合个数;
 int count = 0;

 //用于存储结果的数组的行数;
 int r;
 
 //记录存储数组时的行标;
 int s1 = 0;
 
 //存储数组
 public int[][] code;

 /**
  * 初始化;
  */
 test(int[] a) {
  this.a = a;
  this.N = a.length;
  this.temp = new int[N];
  System.arraycopy(a, 0, temp, 0, a.length);
  this.b = new int[N][N];
  this.r = factorialCount(N);
  this.count=r;
  this.code = new int[r][N];
 }

 
 /**
  * 计算排列组合有多少种
  * @param x 原数组元素个数
  * @return
  */
 private int factorialCount(int x) {
  if (x > 1)
   return x * factorialCount(x - 1);
  else
   return 1;

 }

 /**
  *  打印结果
  */
 public void print() {
  for (int i = 0; i < code.length; i++) {
   for (int j = 0; j < code[i].length; j++)
    System.out.print(code[i][j] + " ");
   System.out.println();
  }

  System.out.println("排列组合共: " + count + "种");
 }

 
 /**
  * 核心变换
  * @param x 元素下标
  */
 public void factorial(int x) {

  if (x < N) {
   for (int i = x; i < N; i++) {
    if (x > 0)
     for (int h = x; h < N; h++)
      a[h] = b[x - 1][h];
    else
     for (int h = x; h < N; h++)
      a[h] = temp[h];

    int t;
    t = a[x];
    a[x] = a[i];
    a[i] = t;

    for (int h = 0; h < N; h++)
     b[x][h] = a[h];

    if (x < N - 1)
     factorial(x + 1);
    else {
     for (int j = 0; j < N; j++) {
      code[s1][j] = a[j];
     }
     s1++;

    }
   }
  }
 }

 /**
  * 测试
  * @param args
  */
 public static void main(String[] args) {

  int[] a = { 1, 2, 3};
  test t = new test(a);
  t.factorial(0);
  
  //打印结果;
  t.print();

 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值