For example, [1,2,3] have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]这道题中规中矩吧,全排列没有重复的数组,就用递归即可。代码如下:
public List<List<Integer>> permute(int[] nums) { boolean[] flags = new boolean[nums.length]; List<List<Integer>> result = new ArrayList<List<Integer>>(); List<Integer> empty = new ArrayList<Integer>(); permute(result,empty,nums,flags,0); return result; } private void permute(List<List<Integer>> result,List<Integer> empty,int[] nums, boolean[] flags, int cnt) { // TODO Auto-generated method stub if(cnt == nums.length){ result.add(new ArrayList<Integer>(empty)); } for(int i = 0; i < flags.length; i++){ if(flags[i] == false){ empty.add(nums[i]); flags[i] = true; permute(result, empty, nums, flags, cnt+1); flags[i] = false; empty.remove(empty.size()-1); } } } 不过在网上看到一个类似的十分巧妙的想法,链接如下: http://blog.csdn.net/happyaaaaaaaaaaa/article/details/51534048 速度十分快