首页 > 代码库 > 46. Permutations
46. Permutations
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], [3,2,1] ]
看结果什么时候输出, 看子集添加元素时的起始位置—pos 或i是否添加过
从头访问的dfs经常要看看是否访问过, 也可以用Arraylist 或boolean visited[] 的容器存储index, 这样可以用在重复且从头开始遍历的dfs里面
if (list.contains(nums[i])) { continue; }
public List<List<Integer>> permute(int[] nums) { // write your code here // write your code herenums ArrayList<List<Integer>> result = new ArrayList<List<Integer>>(); ArrayList<Integer> list = new ArrayList<Integer>(); if (nums.length == 0) { result.add(list); return result; } //题目要求每个答案要有序 Arrays.sort(nums); helper(result, list, nums); return result; } private void helper (ArrayList<List<Integer>> result, ArrayList<Integer> list, int[] nums) { //加上判断看看什么时候需要添加到结果中 if (list.size() == nums.length) { result.add(new ArrayList<Integer>(list)); } for (int i = 0; i < nums.length; i++) { //画图得到必须要跟前一个节点的值不同并且不是第一次循环进入的点(不然会空指针异常, 或者同一层次(pos进入)的点,
// 即同一个递归函数不能跟后面的值一样) //什么时候往子集里添加元素 if (list.contains(nums[i])) { continue; } //加上判断防止栈溢出,保证子集的元素不断加入 list.add(nums[i]); helper(result, list, nums); list.remove(list.size() - 1); // 回溯法的 应用 } } }
46. Permutations
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。