前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-47. 全排列 II

leetcode-47. 全排列 II

作者头像
灰太狼学Java
发布2022-06-17 11:13:33
2240
发布2022-06-17 11:13:33
举报
文章被收录于专栏:Java学习驿站

JAVA解法

代码语言:javascript
复制
class Solution {
    //定义结果集
    List<List<Integer>> result = new ArrayList<>();
    //定义临时结果集
    List<Integer> path = new ArrayList<>();

    public List<List<Integer>> permuteUnique(int[] nums) {
        boolean[] used = new boolean[nums.length];
        // 将 used 全部赋值为 false
        Arrays.fill(used, false);
        // 对传进来的数组进行排序
        Arrays.sort(nums);
        // 进入回溯主体
        backTrack(nums, used);
        // 返回最终结果集
        return result;
    }

    // 实现回溯
    private void backTrack(int[] nums, boolean[] used) {
        // 当临时结果集存储的个数跟传进来的数组的长度相等时说明排序完毕
        if (path.size() == nums.length) {
            // 将排序好的结果加入结果集中
            result.add(new ArrayList<>(path));
            return;
        }
        // 开始遍历
        for (int i = 0; i < nums.length; i++) {
            // 如果同⼀树层 nums[i - 1] 使⽤过则直接跳过
            if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {
                continue;
            }
            //如果同⼀树⽀ nums[i] 没使⽤过开始处理
            if (used[i] == false) {
                //标记同⼀树⽀ nums[i] 使⽤过,防止同一树支重复使用
                used[i] = true;
                path.add(nums[i]);
                backTrack(nums, used);
                //回溯,说明同⼀树层 nums[i] 使⽤过,防止下一树层重复
                path.remove(path.size() - 1);
                used[i] = false;
            }
        }
    }
}

题解分析

  定义全局存储最终结果集和临时结果集的变量。定义一个存储布尔值的数组并全部赋值为 false,把传进来的数组排序,排序完传入回溯,得到最终答案后返回最终结果集即可。   回溯算法传入的参数有已排序的数组和全是 false 的布尔数组。数组长度和临时结果集的长度进行比较,当临时结果集存储的个数跟传进来的数组的长度相等时说明排序完毕,若排序完毕则加入结果集,记得将临时结果集加入数组中。   若没排序完,则对传入的待排序数组进行判断,若 nums[i] == nums[i - 1] 即当前层选择的数与上一层所选择的一样,且 used[i - 1] == false 即说明同⼀树层 nums[i - 1] 使⽤过则直接跳过,进入下一循环。如果同⼀树⽀ nums[i] 没使⽤过则开始处理,标记同⼀树⽀ nums[i] 使⽤过,防止同一树支重复使用,进入回溯,说明同⼀树层 nums[i] 使⽤过,防止下一树层重复使用,记得回溯后将当前选择移除,且设置为 false 让同层的选择不受影响。

leetcode原题:47. 全排列 II

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3heqnkgr0co4g

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JAVA解法
  • 题解分析
  • 我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3heqnkgr0co4g
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档