[100天算法】-全排列 II(day 51)

这篇具有很好参考价值的文章主要介绍了[100天算法】-全排列 II(day 51)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]
输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路

复杂度分析

  • 时间复杂度:
  • 空间复杂度:

代码

JavaScript Code文章来源地址https://www.toymoban.com/news/detail-738260.html

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permuteUnique = function (nums) {
    const backtrack = (nums, path, res, visited) => {
        if (path.length === nums.length) {
            res.push(path);
            return;
        }

        for (let i = 0; i < nums.length; i++) {
            if (
                visited[i] ||
                (i > 0 && nums[i] === nums[i - 1] && visited[i - 1])
            )
                continue;
            visited[i] = true;
            path.push(nums[i]);
            backtrack(nums, [...path], res, visited);
            path.pop();
            visited[i] = false;
        }
    };

    const res = [];
    nums.sort((a, b) => a - b);
    backtrack(nums, [], res, Array(nums.length));
    return res;
};

到了这里,关于[100天算法】-全排列 II(day 51)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法题】47. 全排列 II

    给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums = [1,1,2] 输出: [[1,1,2],  [1,2,1],  [2,1,1]] 示例 2: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]   提示: 1 = nums.length = 8 -10 = nums[i] = 10 来自力扣官方题解

    2024年02月01日
    浏览(28)
  • 代码随想录刷题笔记 DAY 29 | 非递减子序列 No.491 | 全排列 No.46 | 全排列 II No. 47

    01. 非递减子序列(No. 491) 题目链接 代码随想录题解 1.1 题目 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种

    2024年02月21日
    浏览(34)
  • 算法leetcode|47. 全排列 II(rust重拳出击)

    给定一个可包含重复数字的序列 nums , 按任意顺序 返回所有不重复的全排列。 1 = nums.length = 8 -10 = nums[i] = 10 面对这道算法题目,二当家的再次陷入了沉思。 要做全排列,就用递归套娃大法,回溯是大方向。 有重复的数字,又要不重复的排列,去重也是必须的了,最慢的方

    2023年04月26日
    浏览(53)
  • 【算法Hot100系列】全排列

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年01月18日
    浏览(93)
  • 【算法Hot100系列】下一个排列

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月03日
    浏览(43)
  • java数据结构与算法刷题-----LeetCode667. 优美的排列 II

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 题目要求我们返回一个数组长度为n的数组,必须含有1~n的所有数,并且从左到右,相邻的元素依次相减,它们的差,必

    2024年01月25日
    浏览(41)
  • 算法Day39 | 62. 不同路径,63. 不同路径 II

    题目链接:62. 不同路径 dp[i][j] 结果为从起点到该点有多少路径。 递归公式: dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 初始化:因为只能从上往下、从左往右走,因此最上侧,最左侧初始化为1(1种路径) 遍历顺序:从上往下,从左往右 也可以使用 滚动 (一维)数组。 其中 dp[j] 表示

    2024年02月10日
    浏览(36)
  • 算法刷题Day 39 不同路径+不同路径II

    递归(深搜) 使用递归的方法超时(可以过37个case) 来分析一下时间复杂度,这个深搜的算法,其实就是要遍历整个二叉树。 这棵树的深度其实就是m+n-1(深度按从1开始计算)。 那二叉树的节点个数就是 2^(m + n - 1) - 1。可以理解深搜的算法就是遍历了整个满二叉树(其实没

    2024年02月12日
    浏览(34)
  • 算法刷题Day 28 复原IP地址+子集+子集II

    我的做法有点奇怪,还是参考一下代码随想录的做法吧 涉及到去重,可别忘了排序 不然去重的效果没法实现

    2024年02月16日
    浏览(33)
  • 算法|Day51 单调栈2

    LeetCode 503- 下一个更大元素 II 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目描述 :给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数

    2024年02月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包