全排列 全排列 II N皇后

46.全排列

力扣題目鏈接(opens new window)

給定一個 沒有重復 數字的序列,返回其所有可能的全排列。

示例:

  • 輸入: [1,2,3]
  • 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]

遞歸終止條件:當收集元素的數組path的大小達到和nums數組一樣大的時候,說明找到了一個全排列,也表示到達了葉子節點。

而used數組,其實就是記錄此時path里都有哪些元素使用了,一個排列里一個元素只能使用一次。

  • 每層都是從0開始搜索而不是startIndex
  • 需要used數組記錄path里都放了哪些元素了

class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking (vector<int>& nums, vector<bool>& used) {// 此時說明找到了一組if (path.size() == nums.size()) {result.push_back(path);return;}for (int i = 0; i < nums.size(); i++) {if (used[i] == true) continue; // path里已經收錄的元素,直接跳過used[i] = true;path.push_back(nums[i]);backtracking(nums, used);path.pop_back();used[i] = false;}}vector<vector<int>> permute(vector<int>& nums) {result.clear();path.clear();vector<bool> used(nums.size(), false);backtracking(nums, used);return result;}
};

47.全排列 II

力扣題目鏈接(opens new window)

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

?先排序,樹層去重,123,132可以出現所以不用index,一次排列用過的元素不能再用了 所以設置used數組

class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking (vector<int>& nums, vector<bool>& used) {// 此時說明找到了一組if (path.size() == nums.size()) {result.push_back(path);return;}for (int i = 0; i < nums.size(); i++) {// used[i - 1] == true,說明同一樹枝nums[i - 1]使用過// used[i - 1] == false,說明同一樹層nums[i - 1]使用過// 如果同一樹層nums[i - 1]使用過則直接跳過if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {continue;}if (used[i] == false) {used[i] = true;path.push_back(nums[i]);backtracking(nums, used);path.pop_back();used[i] = false;}}}
public:vector<vector<int>> permuteUnique(vector<int>& nums) {result.clear();path.clear();sort(nums.begin(), nums.end()); // 排序vector<bool> used(nums.size(), false);backtracking(nums, used);return result;}
};

51. N皇后

力扣題目鏈接

?

  • 驗證棋盤是否合法

按照如下標準去重:

  1. 不能同行
  2. 不能同列
  3. 不能同斜線 (45度和135度角)

回溯三部曲:

(1)確定參數及返回值:返回類型為void型,參數n為棋盤大小,row記錄到第幾層。

(2)返回條件:當遍歷到棋盤的最后一層,就可以收集結果并返回。

(3)單層搜索的邏輯:每一行每一列進行遍歷確定皇后的位置。

class Solution {
private:
vector<vector<string>> result;
// n 為輸入的棋盤大小
// row 是當前遞歸到棋盤的第幾行了
void backtracking(int n, int row, vector<string>& chessboard) {if (row == n) {result.push_back(chessboard);return;}for (int col = 0; col < n; col++) {if (isValid(row, col, chessboard, n)) { // 驗證合法就可以放chessboard[row][col] = 'Q'; // 放置皇后backtracking(n, row + 1, chessboard);chessboard[row][col] = '.'; // 回溯,撤銷皇后}}
}
bool isValid(int row, int col, vector<string>& chessboard, int n) {// 檢查列for (int i = 0; i < row; i++) { // 這是一個剪枝if (chessboard[i][col] == 'Q') {return false;}}// 檢查 45度角是否有皇后for (int i = row - 1, j = col - 1; i >=0 && j >= 0; i--, j--) {if (chessboard[i][j] == 'Q') {return false;}}// 檢查 135度角是否有皇后for(int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {if (chessboard[i][j] == 'Q') {return false;}}return true;
}
public:vector<vector<string>> solveNQueens(int n) {result.clear();std::vector<std::string> chessboard(n, std::string(n, '.'));backtracking(n, 0, chessboard);return result;}
};

?

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

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

相關文章

CSP-201803-1-跳一跳

CSP-201803-1-跳一跳 解題思路 使用getline函數接收一行輸入&#xff0c;即玩家的跳躍序列。初始化總得分scoreSum為0&#xff0c;上一次得分lastGrade為2&#xff08;因為跳到中心的初始得分是2&#xff09;&#xff0c;以及一個布爾標志flag表示上一次是否跳到了中心&#…

Thinkphp框架漏洞--->5.0.23 RCE

1.Thinkphp ThinkPHP是一個免費開源的&#xff0c;快速、簡單的面向對象的輕量級PHP開發框架&#xff0c;是為了敏捷WEB應用開發和簡化 企業應用開發而誕生的。 2.漏洞原理及成因 該漏洞出現的原因在于 ThinkPHP5框架底層對控制器名過濾不嚴 &#xff0c;從而讓攻擊者可以通過…

lotus 從礦工可用余額扣除扇區質押

修改 miner配置文件 # Whether to use available miner balance for sector collateral instead of sending it with each message## type: bool# env var: LOTUS_SEALING_COLLATERALFROMMINERBALANCE#CollateralFromMinerBalance falseCollateralFromMinerBalance true質押金…

(Sora模型風口)2024最新GPT4.0使用教程,AI繪畫,一站式解決

一、前言 ChatGPT3.5、GPT4.0、GPT語音對話、Midjourney繪畫&#xff0c;文檔對話總結DALL-E3文生圖&#xff0c;相信對大家應該不感到陌生吧&#xff1f;簡單來說&#xff0c;GPT-4技術比之前的GPT-3.5相對來說更加智能&#xff0c;會根據用戶的要求生成多種內容甚至也可以和…

代碼隨想錄算法訓練營第10天| 232. 用棧實現隊列、225. 用隊列實現棧

232. 用棧實現隊列 題目鏈接 232. 用棧實現隊列 - 力扣&#xff08;LeetCode&#xff09; 思路 記得是用兩個棧實現的隊列&#xff0c;但是細節記不太住&#xff0c;看了視頻才勉強縫縫補補做出來。 本人題解 class MyQueue { public:stack<int> stackIn;stack<…

【C語言】動態內存管理常用函數

前言 我們在之前學習的數組開辟的空間是固定不變的&#xff0c;有時候我們需要的空間??在程序運?的時候才能知道~ c語言中的動態內存開辟&#xff0c;讓程序員??可以根據實際需求申請和釋放相應空間&#xff0c;這使得空間的開辟變得靈活了許多。 歡迎關注個人主頁&#x…

小程序配置服務器域名的操作步驟(入門級)

將詳細列出小程序配置服務器域名的操作步驟&#xff1a; 服務器選購推薦&#xff1a;騰訊云輕量服務器 點擊以下任一云產品鏈接&#xff0c;跳轉后登錄&#xff0c;自動享有所有云產品優惠權益&#xff1a; 經過筆者親測&#xff0c;強烈推薦騰訊云輕量應用服務器作為游戲服…

微服務簡介及其相關技術棧

目錄 1、簡介 2、技術棧 3、單體架構 4、分布式架構 5、微服務 6、總結 &#x1f343;作者介紹&#xff1a;雙非本科大三網絡工程專業在讀&#xff0c;阿里云專家博主&#xff0c;專注于Java領域學習&#xff0c;擅長web應用開發、數據結構和算法&#xff0c;初步涉獵Pyth…

【QT+QGIS跨平臺編譯】之五十七:【QGIS_CORE跨平臺編譯】—【VECTOR_TILE生成】

文章目錄 一、protoc二、生成來源三、構建過程一、protoc Protocol Buffers(簡稱 protobuf)是一種輕量級、高效的數據序列化框架,它可以將結構化數據序列化為二進制格式,同時還可以進行反序列化和數據壓縮。相比于 XML 和 JSON 等傳統的文本序列化格式,protobuf 采用二進制…

wpa_supplicant交叉編譯

文章目錄 源碼編譯openssl編譯libnl交叉編譯WPA 開發板測試使用 源碼 wpa_supplicant官網&#xff1a;http://w1.fi/wpa_supplicant/ GIT源&#xff1a;git://w1.fi/hostap.git openssl 源碼&#xff1a; https://www.openssl.org/ libnl 源碼&#xff1a; https://github.c…

自定義preference的使用

自定義preference的使用 control_iconsize_preference_top.xmlcontrol_iconsize_preference_middle.xmlcontrol_iconsize_preference_bottom.xmlcontrol_iconsize_preference_airplane.xmlcontrol_iconsize_preference_no_arrow_top.xmlcontrol_iconsize_preference_no_arrow_m…

3 開源鴻蒙OpenHarmony4.1源碼下載、編譯,生成OHOS_Image可執行文件的最簡易流程

開源鴻蒙OpenHarmony4.1源碼下載、編譯&#xff0c;生成OHOS_Image可執行文件的最簡易流程 作者將狼才鯨日期2024-03-01 準備一臺Windows電腦 安裝VMware或者VMware Player虛擬機 從華為鏡像下載Ubuntu系統&#xff0c;用國內源下載速度更快 Ubuntu 鏡像說明https://repo.hu…

map和set例題應用

個人主頁&#xff1a;Lei寶啊 愿所有美好如期而遇 目錄 第一題 第二題 第三題 第一題 隨機鏈表的復制https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 思路 首先遍歷舊鏈表&#xff0c;并創建新節點&#xff0c;同時用map將舊節點與新節點…

python模型訓練

目錄 1、新建模型 train_model.py 2、運行模型 &#xff08;1&#xff09;首先會下載data文件庫 &#xff08;2&#xff09;完成之后會開始訓練模型&#xff08;10次&#xff09; 3、 訓練好之后&#xff0c;進入命令集 4、輸入命令&#xff1a;python -m tensorboard.ma…

網絡工程師筆記6

ICMP協議 Internet控制報文協議ICMP(InternetControlMessage Protocol)是網絡層的一個重要協議。ICMP協議用來在網絡設備間傳遞各種差錯和控制信息&#xff0c;它對于收集各種網絡信息、診斷和排除各種網絡故障具有至關重要的作用。使用基于ICMP的應用時&#xff0c;需要對ICMP…

Vue.js+SpringBoot開發社區買菜系統

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、系統設計2.1 功能模塊設計2.1.1 數據中心模塊2.1.2 菜品分類模塊2.1.3 菜品檔案模塊2.1.4 菜品訂單模塊2.1.5 菜品收藏模塊2.1.6 收貨地址模塊 2.2 可行性分析2.3 用例分析2.4 實體類設計2.4.1 菜品分類模塊2.4.2 菜品檔案模塊2.4.3…

多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網絡多輸入多輸出預測

多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網絡多輸入多輸出預測 目錄 多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網絡多輸入多輸出預測預測效果基本介紹程序設計往期精彩參考資料 預測效果 基本介紹 多輸入多輸出 | Matlab實現RIME-BP霜冰算法優化BP神經網…

Springboot+vue的考勤管理系統(有報告)。Javaee項目,springboot vue前后端分離項目。

演示視頻&#xff1a; Springbootvue的考勤管理系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot vue前后端分離項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層…

GitHub Copilot extension activation error: ‘No access to GitHub Copilot found‘

好不容易學生認證通過了&#xff0c;打開vscode用copilot結果一直報這個錯誤。我的原因是&#xff1a;還未給copilot授權&#xff0c; 通過了學生認證后要進入這里進行授權&#xff1a;

Vue Html中插入本地視頻(Video 標簽)

在 Vue 中插入本地視頻可以通過使用標簽來實現。你可以將視頻文件放在你的項目中的合適位置&#xff08;比如assets文件夾&#xff09;&#xff0c;然后在 Vue 組件中引用這個視頻文件。html同理 首先&#xff0c;在你的 Vue 項目中的assets文件夾下放入你的視頻文件&#xff…