用java实现对数组的排列组合

本程序旨在将数组所有排列结果显示出来,所作的算法。

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;

public class Range {
 private static int count = 0;

//循环的次数
 private static int loopTime = 0;

//保存结果的容器
 private static ArrayList ls = new ArrayList();
 
 public static void main(String[] args) {


  long l1 = Calendar.getInstance().getTimeInMillis();
  Integer[] result = new Integer[6];


  //输入的数组为 1, 2, 3, 4, 5 也可以为任意多数组
  ArrayList al = new ArrayList(6);
  al.add(new Integer(1));
  al.add(new Integer(2));
  al.add(new Integer(2));
  al.add(new Integer(3));  
  al.add(new Integer(4));
  al.add(new Integer(5));


  //递规调用

  rotate(result, al, al.size());  

  
  for(int i=0 ; i< ls.size(); i++){
   System.out.print("this is the " + ++count + " number: ");
   System.out.println(ls.get(i));
  }
  long l2 = Calendar.getInstance().getTimeInMillis();
  System.out.println("consume time seconds is: " + (l2-l1));
  System.out.println("loopTime is: " + loopTime);
 }

//递规方法
 public static void rotate(Integer[] result, List al, int index){
  index = result.length - index;
  if(index == result.length-1){   
    ++loopTime;
    result[index] = (Integer)al.get(0);        
    organizeNum(result);   
  }
  for (int s1 = 0; s1 < al.size(); s1++) {
   result[index] = (Integer)al.get(s1);   
   ArrayList al1 = new ArrayList(al);
   al1.remove(result[index]);
   rotate(result, al1, al1.size());
  }
 }

//加入容器
 public static void organizeNum(Integer[] result){
  StringBuffer sb = new StringBuffer();
  for(int i=0; i<result.length; i++){
   sb.append(result[i].toString());
  }
   String pstr = sb.toString();

    ls.add(pstr);
  
 } 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值