hot100 -- 回溯(上)

目錄

🍞科普

🌼全排列

AC? DFS

🚩子集

AC? DFS

🎂電話號碼的字母組合

AC? DFS

🌼組合總和

AC? DFS


🍞科普

忘記 dfs 的,先看看這個👇

DFS(深度優先搜索)8種題型_dfs典型問題-CSDN博客

🌼全排列

46. 全排列 - 力扣(LeetCode)

AC? DFS

排列型枚舉哦~

vector 中 push_back 和 [] 下標訪問是不一樣的

push_back() 是往末尾加入元素,vector 大小會自動增加

而 [] 是直接改變 vector 某個位置的元素

如果你先 ret[i] = count[i]; 然后 ret.pop_back(); 多次循環后,vector 為空,此時再訪問就會報錯空指針 Null Pointer 錯誤

時間 O(n * !n),空間 O(n)

class Solution {
private:vector<vector<int>> ans;vector<int> ret; // 臨時答案bool vis[7]; // 標記數組--需要回溯void dfs(vector<int>& nums, int count) {int n = nums.size();// 遞歸出口if (count == n) {ans.push_back(ret);return;}// 遍歷每個位置for (int i = 0; i < n; ++i) {if (vis[i] == 0) {ret.push_back(nums[i]); // 加入答案數組vis[i] = 1; // 標記dfs(nums, count + 1); // 遞歸vis[i] = 0; // 取消標記ret.pop_back(); // 取消標記}}}public:vector<vector<int>> permute(vector<int>& nums) {\dfs(nums, 0);return ans;}};

🚩子集

78. 子集 - 力扣(LeetCode)

指數型枚舉哦~

AC? DFS

只有 選 / 不選 兩種

時間 O(n * 2^n),空間 O(n)

class Solution {
private:vector<vector<int>> ans;vector<int> ret; // 臨時答案
public:void dfs(vector<int>& nums, int count) {int n = nums.size();// 遞歸出口if (count == n) {ans.push_back(ret);return;}// 選 OR 不選// 選ret.push_back(nums[count]); // 類似標記dfs(nums, count + 1); // 遞歸ret.pop_back(); // 類似取消標記// 不選dfs(nums, count + 1);}vector<vector<int>> subsets(vector<int>& nums) {dfs(nums, 0);return ans;}
};

🎂電話號碼的字母組合

17. 電話號碼的字母組合 - 力扣(LeetCode)

AC? DFS

空數組是 {},而不是 [],編譯器看不懂這種 lambda 表達式

本題不要標記,因為,比如 "222",是可以取 "aaa" 的?

3 個字母的數字輸入?m 個,4 個字母的輸入?n 個

時間 O(3^m * 4^n) -- 遍歷每一種字母組合

/*
1)  n 個數字, 每個數字取 1 個字母, 共取出 n 個字母
2) 取出的 n 個字母,按順序組合起來 -- O(1)
*/
class Solution {
private:string ret; // 臨時答案vector<string> ans;string num_alpha[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};// 已選 count 個數字void dfs(string digits, int count) {int n = digits.size();if (count == n) {ans.push_back(ret);return;}int num = digits[count] - '0'; // 當前數字string now = num_alpha[num]; // 當前字符串// 取一個字母for (int i = 0; i < now.size(); ++i) {ret.push_back(now[i]); // 插入字母dfs(digits, count + 1); // 遞歸ret.pop_back(); // 回溯時,便于填充其他字母}}public:vector<string> letterCombinations(string digits) {// 特判空字符串, 返回空數組, 而不是包含空字符串的數組 [""]if (digits == "")return {};dfs(digits, 0);return ans;}
};

🌼組合總和

39. 組合總和 - 力扣(LeetCode)

AC? DFS

1)指數型枚舉的前提下,一個數字可以 “無限制重復” 被選取

2)還要考慮到,這題是 組合 問題,相同組合不同排列,視為同一種結果

3)分兩種情況討論,選 / 不選,注意參數的不同

class Solution {
private:vector<vector<int>> ans;vector<int> ret; // 臨時答案// num - candidates[i], num == 0 得到一個結果// 剩余 num, 第 start 個數字void dfs(vector<int>& candidates, int num, int start) {int n = candidates.size();// 遞歸出口if (start >= n) return;// 一種結果if (num == 0) {ans.push_back(ret);return;}// 選(當前數字)// 不超過 targetif (num - candidates[start] >= 0) {ret.push_back(candidates[start]);dfs(candidates, num - candidates[start], start); // 選當前數字ret.pop_back(); // 恢復現場}// 不選(當前數字)dfs(candidates, num, start + 1); // 遞歸下一個}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {dfs(candidates, target, 0); // 剩余 target, 第 0 個數字開始return ans;}
};

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

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

相關文章

百度軟件測試面試經歷,期望薪資27K

一面 1、 請為百度搜索框設計測試用例&#xff1f; 2、百度設計框上線前需要進行那些測試&#xff1f; 界面測試&#xff0c;功能測試&#xff0c;性能測試&#xff0c;安全性測試&#xff0c;易用性測試&#xff0c;兼容性測試&#xff0c;UI測試。 3、如何查看http狀態碼…

重學java 38.創建線程的方式?

It is during our darkest moments that we must focus to see the light —— 24.5.24 一、第一種方式_繼承extends Thread方法 1.定義一個類,繼承Thread 2.重寫run方法,在run方法中設置線程任務(所謂的線程任務指的是此線程要干的具體的事兒,具體執行的代碼) 3.創建自定義線程…

基于灰狼優化算法優化支持向量機(GWO-SVM)回歸預測

代碼原理 基于灰狼優化算法優化支持向量機&#xff08;GWO-SVM&#xff09;的回歸預測代碼的原理和流程如下&#xff1a; 1. **初始化灰狼群體**&#xff1a;隨機生成一定數量的灰狼&#xff0c;并初始化它們的位置和速度。 2. **初始化SVM模型參數**&#xff1a;根據問題要…

【JAVA基礎之網絡編程】UDP和TCP協議以及三次握手和四次揮手的過程

&#x1f525;作者主頁&#xff1a;小林同學的學習筆錄 &#x1f525;mysql專欄&#xff1a;小林同學的專欄 目錄 1. 網絡編程 1.1 概述 1.2 網絡編程的三要素 1.2.1 IP地址 1.2.2 InetAddress 1.2.3 端口和協議 1.3 UDP協議 1.3.1 UDP發送數據 1.3.2 UDP接收數據 1.4…

C語言——小知識和小細節18

一、力扣題目 1、題目本體 2、題解 本題目我們使用異或分組的方法來解決。可以在我之前的文章《C語言——操作符CSDN博客》中看一下異或的特點。 由于異或的運算規則為相同為0&#xff0c;不同為1&#xff0c;而且是在二進制補碼上進行操作的&#xff0c;我們可以發現的一個…

c++|多態

c|多態 1 多態的概念2 多態的定義及其實現2.1 滿足多態的條件2.2 虛函數2.3 虛函數的重寫2.4 析構函數適合加virtural嗎2.4 C11 override 和 final2.5 三個概念的對比 3 多態的原理4 抽象類4.1 概念4.2 純虛函數 1 多態的概念 多態的概念&#xff1a;通俗來說&#xff0c;就是…

2413. 最小偶倍數

題目&#xff1a; 給你一個正整數 n &#xff0c;返回 2 和 n 的最小公倍數&#xff08;正整數&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;n 5 輸出&#xff1a;10 解釋&#xff1a;5 和 2 的最小公倍數是 10 。 示例 2&#xff1a; 輸入&#xff1a;n 6 輸出&a…

JS 手寫 節流throttle 防抖debounce函數

防抖debounce // 手寫防抖 function debounce(fn, delay 200) {// timer 在閉包中let timer null// 返回一個函數return function(...args) {if (timer) {clearTimeout(timer) // 清空上次的值}timer setTimeout(() > {fn.apply(this, args) // 透傳 this 和函數參數},…

【再探】設計模式—代理模式

代理是指授權代理人在一定范圍內代表其向第三方進行處理有關事務。 1 代理模式 需求&#xff1a;1&#xff09;將業務代碼與非業務代碼分離&#xff0c;在不改變代碼結構的基礎上&#xff0c;為其添加新的功能。2&#xff09;為系統中的某些操作做同一處理&#xff0c;例如進…

[實例] Unity Shader 逐像素漫反射與半蘭伯特光照

漫反射光照是Unity中最基本最簡單的光照模型&#xff0c;本篇將會介紹在片元著色器中實現反射效果&#xff0c;并會采用半蘭伯特光照技術對其進行改進。 1. 逐頂點光照與逐像素光照 在Unity Shader中&#xff0c;我們可以有兩個地方可以用來計算光照&#xff1a;在頂點著色器…

數據結構:帶頭雙向循環鏈表

目錄 前言 鏈表實現 1.定義節點 2.接口實現 1.開辟新節點 2.初始化 3.打印鏈表 4.添加節點 頭插 尾插 在pos位置之前增加節點 5.刪除節點 判空 頭刪 尾刪 刪除pos位置的節點 6.查找 7.釋放 前言 帶頭雙向循環鏈表的結構最復雜&#xff0c;一般用在單獨存儲數…

z3-加法器實驗

補碼器加減法&#xff0c;運算方法簡介 我們要知道什么是補碼的加法&#xff0c;我們為什么要用補碼的加法&#xff1f; 補碼的加法其實就是將兩個補碼形式的二進制數字直接相加&#xff0c;處理的時候忽略超出固定位數的進位。補碼的加法運算和無符號二進制數的加法操作一樣&…

【最新區塊鏈論文錄用資訊】CCF A — SP 2024 共17篇

Conference&#xff1a;45th IEEE Symposium onSecurity and Privacy CCF level&#xff1a;CCF A Categories&#xff1a;網絡與信息安全 Year&#xff1a;2024 Num&#xff1a;17 Efficient Zero-Knowledge Arguments For Paillier Cryptosystem Paillier 加密系統的有效…

基于python的網頁自動刷新工具

1.下載webdriver https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix122.0.2365.59/下載Edge的瀏覽器驅動 2.安裝selenium pip install selenium4.11.1 3.寫代碼 # -*- coding: utf-8 -*- import tkinter as tk from tkinter import messagebox import thr…

【halcon】set_part 實現平移和縮放 徹悟版

背景 之前寫了一篇關于set_part 的文章 &#xff0c;確實也實現了平移和縮放。平移是對的&#xff0c;但是縮放其實有畸變。這個問題一直都困擾著我&#xff0c;知道昨天連續測試了好幾個小時&#xff0c;直到晚上11點終于完美解決。 坐標和高寬 坐標 再講set_part 之前&am…

免費擼gpt-4o和各種大模型實用經驗分享

項目 Github: https://github.com/MartialBE/one-api 先貼兩張圖&#xff1a; 說明 免費擼AI大模型,各位可以對照下面我給出的大模型記錄表來填&#xff0c;key需要自己去拿&#xff0c;國內都需要手機號驗證&#xff0c;如果你不介意。另外我在自己的博客放出免費API給大家…

模型評價指標筆記:混淆矩陣+F1+PR曲線+mAP

評價指標 二分類評價指標 混淆矩陣 TP: 正確預測為了正樣本&#xff0c;原來也是正樣本 FN: 錯誤的預測為負樣本&#xff0c;原來是正樣本 (漏報&#xff0c;沒有找到正確匹配的數目) FP: 錯誤的預測為正樣本&#xff0c;原來是負樣本 (誤報&#xff0c;沒有的匹配不正確) TN…

CIM模型

CIM 是 Esri 制圖信息模型。 它是一個地圖內容規范,用于記錄在保存、讀取、引用或打開時如何永久保留描述不同項目組件的信息。 該規范以 JSON 表示,適用于 ArcGIS 應用程序和 API 中的地圖、場景、布局、圖層、符號和樣式。 CIM 不僅限于制圖設置。 要了解屬性的組織方式以及…

【Tools】SpringBoot工程中,對于時間屬性從后端返回到前端的格式問題

Catalog 時間屬性格式問題一、需求二、怎么使用 時間屬性格式問題 一、需求 對于表中時間字段&#xff0c;后端創建對應的實體類的時間屬性需要設定格式&#xff08;默認的格式不方便閱讀&#xff09;&#xff0c;再返回給前端。 二、怎么使用 導入jackson相關的坐標&#x…