穷举vs暴搜vs深搜vs回溯vs剪枝专题一>全排列II

题目:


解析:

这题设计递归函数,主要把看如何剪枝


代码:

java 复制代码
class Solution {
    private List<List<Integer>> ret;
    private List<Integer> path;
    private boolean[] check;
    public List<List<Integer>> permuteUnique(int[] nums) {
        ret = new ArrayList<>();
        path = new ArrayList<>();
        check = new boolean[nums.length];
        Arrays.sort(nums);//

        dfs(nums,0);
        return ret;
    }

    //pos是决策树层数
    private void dfs(int[] nums,int pos){
        if(pos == nums.length){
            ret.add(new ArrayList<>(path));
            return;
        }

        for(int i = 0; i < nums.length; i++){ 
            
            //不合法分支剪枝
            if(check[i] == true || i != 0 && nums[i] == nums[i-1] && check[i-1] == false)
                continue;

            if(check[i] == false){
            path.add(nums[i]);
            check[i] = true;
            dfs(nums,pos+1);

            //恢复现场
            path.remove(path.size()-1);
            check[i] = false;
            }

        }
    }
}
相关推荐
Dream it possible!几秒前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
夏末秋也凉2 分钟前
力扣-回溯-46 全排列
数据结构·算法·leetcode
南宫生2 分钟前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴6 分钟前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
Leuanghing7 分钟前
【Leetcode】11. 盛最多水的容器
python·算法·leetcode
qy发大财7 分钟前
加油站(力扣134)
算法·leetcode·职场和发展
王老师青少年编程8 分钟前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
qy发大财9 分钟前
柠檬水找零(力扣860)
算法·leetcode·职场和发展
瓦力的狗腿子11 分钟前
Starlink卫星动力学系统仿真建模番外篇6-地球敏感器
算法·数学建模·simulink
一只码代码的章鱼42 分钟前
数据结构与算法-搜索-剪枝
算法·深度优先·剪枝