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中的结果改变了。

相关推荐
wdfk_prog15 分钟前
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理
c语言·缓存·面试·职场和发展·架构
QXWZ_IA3 小时前
1库1图1批是什么?千寻位置公安地图数据体系详解
科技·算法·能源·媒体·交通物流·政务
c238563 小时前
Bug 猎手入门指南
c++·算法·bug
Reart4 小时前
Leetcode 213.打家劫舍2(内含闲谈,打劫真是技术活,好题,716)
后端·算法
Reart5 小时前
Leetcode 198.打家劫舍(716)
后端·算法
Jerry5 小时前
LeetCode 110. 平衡二叉树
算法
玖玥拾5 小时前
C++ 数据结构 八大基础排序算法专题
数据结构·c++·算法·排序算法
Tim_105 小时前
【C++】017、new/delete与malloc/free的区别
java·数据结构·算法
从零开始的代码生活_6 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list