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

相关推荐
剑挑星河月2 小时前
31.下一个排列
java·算法·leetcode
凌波粒2 小时前
LeetCode--98.验证二叉搜索树(二叉树)
算法·leetcode·职场和发展
Misnearch2 小时前
3635. 最早完成陆地和水上游乐设施的时间II
leetcode·贪心·排序
Kurisu5752 小时前
深度拆解:从令牌桶到滑动窗口,高并发系统限流算法的数学本质与边界
java·网络·算法
哈泽尔都2 小时前
运动控制教学——5分钟学会力控算法(阻抗/导纳/力位混合)
c++·python·算法·决策树·贪心算法·机器人·gpu算力
WWW65262 小时前
代码随想录 打卡第四十七天
数据结构·算法·leetcode
cpp_25012 小时前
P10722 [GESP202406 六级] 二叉树
数据结构·c++·算法·题解·洛谷·树形结构·gesp六级
smj2302_796826522 小时前
解决leetcode第3948题字典序最大的MEX数组
python·算法·leetcode
周末也要写八哥3 小时前
浅谈:C++中cpp 14 ~ cpp 17
开发语言·c++·算法