教育行业怎么做网站投放,郑州新动力网络技术是干嘛的,打开一个网站为繁体字是怎么做的,wordpress采集文章发布LCR 083. 全排列 - 力扣#xff08;LeetCode#xff09; 根据题意#xff0c;要根据给定的整数数组#xff0c;穷举出所有可能的排列#xff0c;从直观的角度上来看#xff0c;可以使用多层 for 循环来解决#xff0c;但如果是数组长度太大的时候#xff0c;这种方式不…LCR 083. 全排列 - 力扣LeetCode 根据题意要根据给定的整数数组穷举出所有可能的排列从直观的角度上来看可以使用多层 for 循环来解决但如果是数组长度太大的时候这种方式不太合适。 对于此类问题要先画出决策图例如对于数组 [1,2,3] 而言 全局变量使用全局变量会让方法调用时的参数更加简单 1. 使用全局变量 List 数组来存每一个符合要求的排列 2. 使用全局变量 List 来暂存每一次遍历的排列值 3. 由于需要通过剪枝来去掉一些不符合要求的情况也就是重复出现数字的情况因此使用全局变量 boolea[] 来存原始数组的值是否被使用被使用则为1否则为0 关注递归函数dfs本身 使用for循环结合剪枝来进行排列组合 回溯每当枚举完一个分支后要回到分支的主节点是需要进行回溯的把全局变量 List 最后一个节点去掉以及将该节点对应的 boolean[] 中的值由 true 改为 false 剪枝剪掉重复出现数字的情况 递归出口当全局变量 List 的长度等于原始数组的长度说明已经存满了就可以直接将当前的 List 存到 全局变量 List数组中 代码实现
class Solution {ListListInteger ret;ListInteger str;boolean[] judge;public ListListInteger permute(int[] nums) {ret new ArrayList();str new ArrayList();judge new boolean[nums.length];dfs(nums);return ret;}public void dfs(int[] nums){if(str.size() nums.length){ret.add(new ArrayList(str)); // 递归出口符合条件。直接add}for(int i0;inums.length;i){if(judge[i] false){ // 剪枝boolean如果是true说明出现过了就不再进入了str.add(nums[i]);judge[i] true;dfs(nums); // 继续递归// 回溯将最后一个值去掉boolean改为falsestr.remove(str.size()-1);judge[i] false;}}}
}