Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

47. 全排列 II #32

Open
Open
@Geekhyt

Description

@Geekhyt

原题链接

回溯

本题与46. 全排列解题思路一样。

不同之处:序列 nums 是可以重复的,要求按任意顺序返回所有不重复的全排列。

  1. 去重就要排序,排序后可以使相同的数字相邻,便于去重。
  2. 使用 used 数组记录使用过的数字,true 代表使用过,false 代表未使用过。
  3. 在迭代的过程中需要考虑好情况,充分剪枝。
  4. 在选择时记录used[i] 状态,撤销时也要重置used[i] 状态。
constpermuteUnique=function(nums){constlen=nums.length,res=[],used=[]nums.sort((a,b)=>a-b)constbacktrack=(deepStack)=>{if(deepStack.length===len){res.push(deepStack.slice())return}for(leti=0;i<len;i++){// 当前选项与上一项相同、且上一项存在、且没有被使用过,则忽略if(nums[i-1]===nums[i]&&i-1>=0&&!used[i-1])continueif(used[i])continue// 使用过便不再使用deepStack.push(nums[i])used[i]=truebacktrack(deepStack)deepStack.pop()used[i]=false}}backtrack([])returnres}
  • 时间复杂度: O(n * n!)
  • 空间复杂度: O(n)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp