Given a collection of distinct numbers, return all possible permutations.排列组合

来源:互联网 发布:制定网络安全标准 编辑:程序博客网 时间:2024/06/06 05:07
/*
Given a collection of distinct numbers, return all possible permutations.For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].
*/
</pre><pre name="code" class="java">
import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Collections;import java.util.List;public class Permutations {public static void main(String[] args) {List<List<Integer>> a=new Permutations().permute(new int[]{5,4,6,2});for(List<Integer> b:a){for(Integer c:b)System.out.print(c);System.out.println();}}    public List<List<Integer>> permute(int[] nums) {    int length=nums.length;        int size=0;    for(int i=1;i<=length;i++)size*=i;    List<List<Integer>> result=new ArrayList<List<Integer>>(size);            for(int i=1;i<=length;i++)        {        if(result.size()==0)        {        List<Integer> tem=new ArrayList<Integer>();        tem.add(nums[0]);        result.add(tem);        continue;        }        int len=result.size();        //由于要新增i个已有快        for(int aa=0;aa<i-1;aa++)        {        for(int z=0;z<len;z++)        result.add(new ArrayList<Integer>(result.get(z)));        }        //根据所处块位置决定所加元素位置        for(int j=0;j<result.size();j++)        {        if(result.get(j).size()<j/len)//无法用add在最后插入,因此要单独拿出来        {        result.get(j).add(nums[i-1]);        }        else        {        result.get(j).add(j/len, nums[i-1]);        }                }        }        return result;    }}

0 0
原创粉丝点击