穷举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;
            }

        }
    }
}
相关推荐
hetao17338375 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6266 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan6 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356387 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah7 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO97 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician8 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.8 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o9 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者9 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express