疯狂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());

  }

  }

如果你还想了解更多内容,欢迎咨询广州疯狂java的官方网站,我们这里有android视频教程和java视频教程共享给大家!