全排列算法的递归与非递归实现(java版)
问题定义
对于给定的集合A{a1,a2,…,an},其中的n个元素互不相同,如何输出这n个元素的所有排列(全排列)。
例如:给定集合[1,2,3] 它的全排列子集为:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
递归算法(非去重)
思路:
1.保持第一个数不变,对后面的数进行全排列
2.将第一个数换成其它数,对后面的数进行全排列
3.第一个数所有情况遍历遍历完成,得到全排列
例如:【1,2,3,4】
对1开头的所有排列,得到【1,2,3,4】【1,2,4,3】【1,3,2,4】【1,3,4,2】【1,4,2,3】【1,4,3,2】
对2开头的所有排列….依次类推
public List<List<Integer>> permute(int[] nums) {
// write your code here
List<List<Integer>> result=new ArrayList<>();
List<Integer> permutation=new ArrayList<>();
Set<Integer> set=new HashSet<>();
if(nums==null){
return result;
}
if(nums.length==0){
result.add(new ArrayList<Integer>());
return result;
}
Helper(nums,permutation,set,result);
return result;
}
public void Helper(int</