首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

M个值的数组中,选取N个数的全排列组合,该如何解决

2012-02-28 
M个值的数组中,选取N个数的全排列组合M个值的数组中,选取N个数的全排列组合,怎么算?顺序不要求[解决办法]f

M个值的数组中,选取N个数的全排列组合
M个值的数组中,选取N个数的全排列组合,怎么算?顺序不要求

[解决办法]
for example

Java code
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; //最后返回结果集    }} 

热点排行