LeetCode:46全排列

java 复制代码
class Solution {
    //盛放所有的组合
    List<List<Integer>> res = new ArrayList<>();
    //盛放单个组合
    List<Integer> path = new ArrayList<>();
    //记录当前数字是否使用过
    boolean[] used;

    public List<List<Integer>> permute(int[] nums){
        used = new boolean[nums.length];
        backtrack(nums);
        return res;
    }
    //回溯函数
    private void backtrack(int[] nums){
        //当前三个数组填满path,装入res
        if(path.size() == nums.length){
            res.add(new ArrayList<>(path));
            return;
        }

        for(int i = 0; i < nums.length; i++){
            //数字已经在盒子中,跳过
            if(used[i]){
                continue;
            }
            //将数字放入path中
            path.add(nums[i]);
            used[i] = true;

            backtrack(nums);
            //将数字取出来
            path.remove(path.size() - 1);
            used[i] = false;
        }
    }
}

这里必须new ArrayList<>(path),使用深拷贝;如果使用res.add(path),后续执行撤销操作的时候就会将已经存入到res中的结果改变了。

相关推荐
Nil20824 分钟前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
M78佐菲1 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
AI备案指南-满满3 小时前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
土司大王5 小时前
LeetCode hot100——两两交换链表中的节点
算法·leetcode·职场和发展
大熊背6 小时前
树莓派IspPipeline LSC模块原理详解
算法·lsc·isppipeline·mesh lsc
测试19986 小时前
Selenium 无法定位元素的几种解决方案
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
zander2586 小时前
LeetCode 300. 最长递增子序列
算法·leetcode·深度优先
欧叶冲冲冲7 小时前
Python常见数据结构的CRUD(LeetCode高频版速查)
数据结构·python·leetcode
祖力557 小时前
Linux应用软件编程:目录IO与framebuffer
linux·运维·算法·framebuffer·目录io