日期:2014-05-20 浏览次数:20827 次
import java.util.*; public class Test { public static void main(String[] args) throws Throwable { String[] data = {"1", "2", "3", "4", "5"}; int num = 3; List<List<String>> result = parade(Arrays.asList(data), num); for (List<String> l : result) { System.out.println(l); } System.out.printf("total:%s\n", result.size()); } public static List<List<String>> parade(List<String> data, int num) { List<List<String>> result = new ArrayList<List<String>>(); if (num == 1) { //只排一个元素的时候(递归结束条件) for (String s : data) { List<String> l = new ArrayList<String>(); l.add(s); result.add(l); //每个元素分别保存到结果集 } return result; //并返回结果集 } for (int i=0; i<data.size(); i++) { //num>1,即排多个元素的时候,循环 List<String> list = new ArrayList<String>(data); list.remove(i); //去掉当前循环的元素作为下次递归的参数,即剩余的元素做递归 List<List<String>> sub = parade(list, num-1); //递归调用 for (List<String> l : sub) { //然后循环递归得到的结果 l.add(0, data.get(i)); //把当前元素排在每个结果的前面 result.add(l); //并保存到结果集 } } return result; //最后返回结果集 } }