分享

JAVA获得一个数组的指定长度的排列组合

 CevenCheng 2010-11-04

关键字: 转载自http://www./
题目,得到某个数组,比如【1,2,3】 获得其全部的排列组合,包括1个数字的。2个数字的,和三个数字的等等。 

 

Java代码 
  1. import java.util.Stack;  
  2.   
  3. /** 
  4.  * JAVA获得一个数组的指定长度的排列组合。<br> 
  5.  *  
  6.  * @author JAVA世纪网(, laozizhu.com) 
  7.  */  
  8. public class TestSequenceAll {  
  9.   public static void main(String[] args) {  
  10.     TestSequenceAll t = new TestSequenceAll();  
  11.     Object[] arr = { 123 };  
  12.     // 循环获得每个长度的排列组合  
  13.     for (int num = 1; num <= arr.length; num++) {  
  14.       t.getSequence(arr, 0, num);  
  15.     }  
  16.   }  
  17.   
  18.   // 存储结果的堆栈  
  19.   private Stack<Object> stack = new Stack<Object>();  
  20.   
  21.   /** 
  22.    * 获得指定数组从指定开始的指定数量的数据组合<br> 
  23.    *  
  24.    * @param arr 指定的数组 
  25.    * @param begin 开始位置 
  26.    * @param num 获得的数量 
  27.    */  
  28.   public void getSequence(Object[] arr, int begin, int num) {  
  29.     if (num == 0) {  
  30.       System.out.println(stack); // 找到一个结果  
  31.     } else {  
  32.       // 循环每个可用的元素  
  33.       for (int i = begin; i < arr.length; i++) {  
  34.         // 当前位置数据放入结果堆栈  
  35.         stack.push(arr[i]);  
  36.         // 将当前数据与起始位置数据交换  
  37.         swap(arr, begin, i);  
  38.         // 从下一个位置查找其余的组合  
  39.         getSequence(arr, begin + 1, num - 1);  
  40.         // 交换回来  
  41.         swap(arr, begin, i);  
  42.         // 去除当前数据  
  43.         stack.pop();  
  44.       }  
  45.     }  
  46.   }  
  47.   
  48.   /** 
  49.    * 交换2个数组的元素 
  50.    *  
  51.    * @param arr 数组 
  52.    * @param from 位置1 
  53.    * @param to 位置2 
  54.    */  
  55.   public static void swap(Object[] arr, int from, int to) {  
  56.     if (from == to) {  
  57.       return;  
  58.     }  
  59.     Object tmp = arr[from];  
  60.     arr[from] = arr[to];  
  61.     arr[to] = tmp;  
  62.   }  
  63. }  


运行结果 
[1] 
[2] 
[3] 
[1, 2] 
[1, 3] 
[2, 1] 
[2, 3] 
[3, 2] 
[3, 1] 
[1, 2, 3] 
[1, 3, 2] 
[2, 1, 3] 
[2, 3, 1] 
[3, 2, 1] 
[3, 1, 2] 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多