浏览 2837 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-17
import java.util.List; import java.util.Vector; /** * @author bookong <levin_jiang@163.com> * @version 1.0, 2007-9-17 * @since 1.5 */ public class Test { public static void main(String[] args) { try { Object[] objs = new Object[6]; for(int i=0; i<6; i++){ objs[i] = String.valueOf(i); System.out.print(objs[i]+" "); } System.out.println(); System.out.println("====================="); System.out.println("测试 C(6,4)"); List<List<Object>> lists = new Test().permute(objs, 4); for(List<Object> list : lists){ for(Object item : list){ System.out.print(item); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } /** * 对对象数组进行组合操作 * @param objs 进行排列组合操作的对象数组 * @param count 每次取出的个数 * @return List<List<Object>> 结果集合 * @throws Exception */ public List<List<Object>> permute(Object[] objs, int count) throws Exception{ if(objs == null){ throw new Exception("参数'objs'不能为null"); } if(count < 0){ throw new Exception("参数'count'不能小于零"); } if(count > objs.length){ throw new Exception("参数'count'不能大于参数'objs'的长度"); } if(objs.length == 0 || count == 0){ return new Vector<List<Object>>(); } List<List<Object>> result = new Vector<List<Object>>(); int MAX = objs.length; int[] n = new int[count]; String maxStr = ""; String str = ""; for(int i=0; i<count; i++){ n[i] = i; } for(int i=MAX-count; i<MAX; i++){ maxStr += String.valueOf(i) + "_"; } do{ str = ""; for(int i=count-1; i>=0; i--){ if(n[i] > MAX - count + i){ n[i-1]++; for(int j=i; j<count; j++){ n[j] = n[j-1]+1; } } } for(int i=0; i<count; i++){ str += String.valueOf(n[i]) + "_"; } List<Object> subList = new Vector<Object>(); for(int idx : n){ subList.add(objs[idx]); } result.add(subList); n[count-1]++; }while(!str.equals(maxStr)); return result; } } 运行结果: 0 1 2 3 4 5 ===================== 测试 C(6,4) 0123 0124 0125 0134 0135 0145 0234 0235 0245 0345 1234 1235 1245 1345 2345 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-18
晕,没仔细阅读版规,被扣分了
|
|
返回顶楼 | |