LeetCode-47. 全排列 II

1、題目描述:

給定一個可包含重復數字的序列?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

2、代碼:

#include <algorithm>
#include <vector>
using namespace std;class Solution {
public:vector<vector<int>> permuteUnique(vector<int>& nums) {sort(nums.begin(), nums.end()); // 排序使相同元素相鄰,方便后續剪枝vector<vector<int>> result;      // 存儲所有唯一排列的結果集vector<int> path;               // 當前遞歸路徑的排列vector<bool> used(nums.size(), false); // 標記元素是否被使用過backtrack(nums, result, path, used);return result;}private:void backtrack(vector<int>& nums, vector<vector<int>>& result,vector<int>& path, vector<bool>& used) {// 終止條件:當前路徑長度等于數組長度,得到一個完整排列if (path.size() == nums.size()) {result.push_back(path);return;}// 遍歷所有元素選擇可能的排列元素for (int i = 0; i < nums.size(); i++) {// 剪枝條件(核心邏輯):// 1. 當前元素已被使用過,跳過// 2. 當前元素與前一個元素相同,且前一個元素未被使用(樹層剪枝)if (used[i] || (i > 0 && nums[i] == nums[i - 1] && !used[i - 1])) {continue;}// 選擇當前元素used[i] = true;           // 標記為已使用path.push_back(nums[i]);  // 加入當前路徑backtrack(nums, result, path, used); // 遞歸進入下一層選擇// 回溯操作(狀態重置)path.pop_back();          // 從路徑移除最后添加的元素used[i] = false;          // 恢復元素未使用狀態}}
};

3、解題思路:

  1. ??排序預處理??

    • 先對數組排序,使相同元素相鄰,便于后續剪枝判斷重復元素。
    • 示例:[1,1,2]?→ 排序后為?[1,1,2]
  2. ??回溯框架??

    • 通過遞歸遍歷所有可能的排列組合。
    • path?記錄當前路徑,used?標記已使用的元素,result?存儲結果。
  3. ??剪枝策略??

    • ??跳過已使用元素??:若?used[i] == true,直接跳過。
    • ??樹層剪枝??:若當前元素與前一個相同,且前一個未被使用,跳過當前元素。
      (避免同一層遞歸中選擇相同元素,消除重復排列,前一個相同元素未被使用,說明在更淺的遞歸層已經被處理過,當前層需要跳過以避免重復)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78039.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 設計模式:訪問者模式

1. 什么是訪問者模式&#xff1f; 訪問者模式是一種行為設計模式&#xff0c;它允許你在不改變對象結構的前提下&#xff0c;定義新的操作。通過將操作封裝在訪問者對象中&#xff0c;訪問者模式使得你可以在不修改元素類的情況下&#xff0c;向元素類添加新的功能。 訪問者模…

基于stm32的智能門鎖系統

標題:基于stm32的智能門鎖系統 內容:1.摘要 摘要&#xff1a;隨著科技的飛速發展&#xff0c;人們對家居安全的要求日益提高&#xff0c;智能門鎖系統應運而生。本研究的目的是設計并實現一個基于STM32的智能門鎖系統。采用STM32微控制器作為核心控制單元&#xff0c;結合指紋…

GitHub 常見高頻問題與解決方案(實用手冊)

目錄 1.Push 提示權限錯誤(Permission denied) 2.push 報錯:rejected non-fast-forward 3.忘記添加 .gitignore,上傳了無關文件 4. 撤銷最近一次 commit 5.clone 太慢或失敗 6.如何切換/創建分支 7.如何合并分支 8.如何刪除遠程分支 9.如何 Fork + PR(Pull Reque…

【MySQL數據庫入門到精通-04 DML操作】

一、DML DML英文全稱是Data Manipulation Language(數據操作語言)&#xff0c;用來對數據庫中表的數據記錄進行增、刪、改操作。 二、添加數據 1.給指定字段添加數據 代碼如下&#xff08;示例&#xff09;&#xff1a; insert into 表名 &#xff08;字段1&#xff0c;字…

2022 年 9 月青少年軟編等考 C 語言六級真題解析

目錄 T1. 棧的基本操作T2. stack or queue思路分析T3. 合影效果T4. 發型糟糕的一天思路分析T1. 棧的基本操作 題目鏈接:SOJ D1188 此題為 2022 年 6 月三級第二題僅有棧操作的版本,見 2022 年 6 月青少年軟編等考 C 語言三級真題解析中的 T2。 T2. stack or queue 題目鏈…

美創市場競爭力突出!《2025中國數據安全市場研究報告》發布

數據要素時代&#xff0c;數據已成國家戰略性資源&#xff0c;數據安全關乎國家安全&#xff01;數說安全發布的《2025中國數據安全市場研究報告》&#xff08;以下簡稱《報告》&#xff09;顯示&#xff0c;2024年數據安全市場逆勢增長&#xff0c;市場規模首次突破百億。《報…

VUE Element-ui Message 消息提示組件自定義封裝

為了讓message 信息提示的更加方便快捷&#xff0c;減少不同地方的調用&#xff0c;避免代碼的重復&#xff0c;特意再官方message 組件的基礎上二次封裝&#xff0c;使代碼更加的優雅和高效。 實現效果&#xff1a; 代碼組件&#xff1a; 封裝成 message.js 文件&#xff0c;…

高防IP能抵御哪些類型的網絡攻擊?

高防IP&#xff08;High Defense IP&#xff09;是一種專門針對網絡攻擊設計的防護服務&#xff0c;主要通過流量清洗、協議分析、行為檢測等技術抵御多種網絡攻擊。以下是其能防御的主要攻擊類型及原理&#xff1a; ??一、常見防御的攻擊類型?? ??DDoS攻擊&#xff08;分…

小紅書文字配圖平替工具

小紅書的文字配圖只有手機版有&#xff0c;想找一個電腦版的&#xff0c;查了一下。以下是幾款類似小紅書風格的花字、藝術字生成工具&#xff0c;適合制作吸睛的社交媒體配圖&#xff0c;分為 手機APP 和 在線工具 兩類&#xff0c;供你選擇&#xff1a; 一、手機APP推薦 醒圖…

【浙江大學DeepSeek公開課】走向數字社會:從DeepSeek到群體智慧

從DeepSeek到群體智慧 一、人工智能發展脈絡二、DeepSeek大模型的意義與特點三、人工智能促進社會數字化轉型四、群體智慧與數字社會 一、人工智能發展脈絡 圖靈與圖靈機&#xff1a;1937年&#xff0c;圖靈發表論文《On computable numbers, with an application to the Ents…

解讀大型語言模型:從Transformer架構到模型量化技術

一、生成式人工智能概述 生成式人工智能&#xff08;Generative Artificial Intelligence&#xff09;是一種先進的技術&#xff0c;能夠生成多種類型的內容&#xff0c;包括文本、圖像、音頻以及合成數據等。其用戶界面的便捷性極大地推動了其廣泛應用&#xff0c;用戶僅需在…

JSON實現動態按鈕管理的Python應用

在開發桌面應用程序時&#xff0c;動態生成用戶界面元素并根據配置文件靈活管理是一項常見需求。本文將介紹如何使用Python的wxPython庫結合JSON配置文件&#xff0c;開發一個支持動態按鈕創建、文件執行和配置管理的桌面應用程序。該應用允許用戶通過設置界面配置按鈕名稱和關…

序章:寫在前面

目錄 為什么要學習 Python&#xff1f;那么&#xff0c;Python 到底是什么呢&#xff1f;Python 的用戶多嗎&#xff1f;Python 的語法究竟是怎樣的&#xff1f;C 語言JavaPython Python 好學嗎&#xff1f; 為什么要學習 Python&#xff1f; 這個問題或許會讓不少人感到不解。…

onlyoffice歷史版本功能實現,版本恢復功能,編輯器功能實現 springboot+vue2

文章目錄 oonlyoffice歷史版本功能實現 &#xff08;編輯器功能實現&#xff09;springbootvue2前提 需要注意把這個 (改成自己服務器的ip或者域名) 改成 自己服務器的域名或者地址1. onloyoffice 服務器部署 搜索其他文章2. 前段代碼 vue 22.1 需要注意把這個 (改成自己服務器…

解決ubuntu server修改為中文后亂碼問題(改回英文)

操作步驟 1.安裝英文語言包 sudo apt-get install language-pack-en2.編輯/etc/default/locale文件 sudo vim /etc/default/locale修改為以下內容&#xff1a; LANG"en_US.UTF-8" LANGUAGE"en_US:en" LC_ALL"en_US.UTF-8"3.應用配置 sudo l…

安卓的Launcher 在哪個環節進行啟動

安卓Launcher在系統啟動過程中的關鍵環節啟動&#xff0c;具體如下&#xff1a; 內核啟動&#xff1a;安卓設備開機后&#xff0c;首先由引導加載程序啟動Linux內核。內核負責初始化硬件設備、建立內存管理機制、啟動系統進程等基礎工作&#xff0c;為整個系統的運行提供底層支…

數據通信學習筆記之OSPF其他內容2

OSPF 與 BFD 聯動 網絡上的鏈路故障或拓撲變化都會導致設備重新進行路由計算&#xff0c;所以縮短路由協議的收斂時間對于提高網絡的性能是非常重要的。 OSPF 與 BFD 聯動就是將 BFD 和 OSPF 關聯起來&#xff0c;一旦與鄰居之間的鏈路出現故障&#xff0c;BFD 對完品以&…

數據庫原理及應用mysql版陳業斌實驗四

&#x1f3dd;?專欄&#xff1a;Mysql_貓咪-9527的博客-CSDN博客 &#x1f305;主頁&#xff1a;貓咪-9527-CSDN博客 “欲窮千里目&#xff0c;更上一層樓。會當凌絕頂&#xff0c;一覽眾山小。” 目錄 實驗四索引與視圖 1.實驗數據如下 student 表&#xff08;學生表&…

[密碼學實戰]密評考試訓練系統v1.0程序及密評參考題庫(獲取路徑在文末)

[密碼學實戰]密評考試訓練系統v1.0程序及密評參考題庫 引言:密評考試的重要性與挑戰 商用密碼應用安全性評估(簡稱"密評") 作為我國密碼領域的重要認證體系,已成為信息安全從業者的必備技能。根據國家密碼管理局最新數據,截至2024年6月,全國僅有3000余人持有…

藍橋杯練習題2

動態規劃 動態規劃三大題型&#xff1a;計數問題、最值問題、存在性問題&#xff1b; 【最小權值】-- 最值問題 【題目分析】 import java.util.Arrays; Arrays類中的一個方法&#xff1a;Arrays.fill(int[] m,int n) //給 int 類型(或者char類型/Long類型...)的數組全部空間…