java教程:谭老师讲解Java元素排列组合笔记
听了谭老师的java课后,自己回顾并Java元素排列组合的操作——
对于Java元素排列组合,咋一看这问题,貌似很简单,其实还是要费一番脑筋的。思考了2个多小时,终于弄明白其中原理。首先我们从最简单的问题开始入手,如果只有两个元素a和b,他们的排列组合只有两种,这个一目了然。做法是,我们先准备两个list,第一个list用于存储原元素集合,后一个用于输出存储所有的元素排列组合情况。

第一步,我们从list1中拿出a元素放进list2中,接着我们从list1中把剩下的b元素拿出来放进list2集合中,这是第一种情况;第二种情况,我们先从list1中拿出b元素放进list2中,接着我们从list1中把剩下的a元素拿出来放进list2集合中,即最终得到两种排列组合ab和ba。好了,元素个数只有2个情况是最简单的,如果元素个数大于2呢,这时,我们可以换种思维,把最后一个元素前面的所有元素看作一个整体,最后一个元素是一个元素,这样的话,还是只有2个元素的情况,这就是递归算法的思想,把一些类似的行为和事物看作一个整体看待,简化操作。下面贴出递归实现的代码:
package com.lxw.oa.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author Lanxiaowei
* @createTime 2011-8-9 下午01:24:16
*/
public class FullSort {
//NUM设置为待排列数组的长度即实现全排列
private static int NUM = 5;
/**
*
* @param datas
* @param target
*/
private static void sort(List datas, List target) {
if (target.size() == NUM) {
for (Object obj : target){
System.out.print(obj);
}
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
public static void main(String[] args) {
String[] datas = new String[] { "a", "b", "c", "1","2" };
sort(Arrays.asList(datas), new ArrayList());
}
}
本文来源 我爱IT技术网 http://www.52ij.com/jishu/109.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
