全排列2

1、代码:

https://leetcode-cn.com/problems/permutations-ii/submissions/

复制代码
class Solution {
    public List<List<Integer>> permuteUnique(int[] nums) {
        ArrayList<List<Integer>> resultList = new ArrayList<>();
        if (nums == null || nums.length == 0) {
            return resultList;
        }
        dfs(0, nums, resultList);
        return resultList;
    }

    public void dfs(int depth, int[] nums, List<List<Integer>> resultList) {
        // 递归基
        if (depth == nums.length-1) {
            ArrayList<Integer> oneResult = new ArrayList<>();
            for (int i = 0; i < nums.length; i++) {
                oneResult.add(nums[i]);
            }
            resultList.add(oneResult);
            return;
        }

        // 遍历到每一层能做的选择:
        // 第0层:0号位可以和0,1,2交换;
        // 第1层:1号位可以和1,2交换;
        // 第2层:2号位可以和2交换。
        for (int i = depth; i < nums.length; i++) {
            if(isRepeat(nums,depth,i)){
                continue;
            }
            swap(nums, depth, i);
            dfs(depth + 1, nums, resultList);
            swap(nums, depth, i);
        }
    }

    private boolean isRepeat(int[] nums,int depth,int i){
        for (int j = depth; j < i; j++) {
            if(nums[j]==nums[i]){
                return true;
            }
        }
        return false;

    }

    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}
复制代码

。。

posted @   guoyu1  阅读(17)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示