代碼隨想錄算法訓練營第21天—回溯算法01 | ● 理論基礎 ● *77. 組合

理論基礎

  • 回溯是一種純暴力搜索的方法,它和遞歸相輔相成,通常是執行完遞歸之后緊接著執行回溯
  • 相較于以往使用的for循環暴力搜索,回溯能解決更為復雜的問題,如以下的應用場景
  • 應用場景
    • 組合問題
      • 如一個集合{1,2,3,4},找出長度為2的組合
    • 排列問題
      • 相較于組合,排列是有順序的,如{1,2}只有一種組合,但是有兩種排列
    • 切割問題
      • 給一個字符串,給一個要求,求得怎么切割滿足要求
    • 子集問題
      • 給一個集合,求它的子集
    • 棋盤問題
      • 如N皇后和解數獨等
  • 回溯法的思維結構——樹型結構
    • 寬度代表集合的大小
    • 深度代表遞歸的深度
    • 回溯法思維結構
# 回溯編程模板
def backtracking(形參): # 返回值通常為空if (終止條件):存放結果returnfor (選擇:本層集合中元素(樹中節點孩子的數量就是集合的大小)):處理節點backtracking(路徑,選擇列表) # 遞歸回溯,撤銷處理結果

*77. 組合

題目鏈接/文章講解:https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html
視頻講解:https://www.bilibili.com/video/BV1ti4y1L7cv
剪枝操作:https://www.bilibili.com/video/BV1wi4y157er

  • 考點
    • 回溯
  • 我的思路
    • 思路不到位
  • 視頻講解關鍵點總結
    • 回溯(遞歸)三要素
      • 形參:當前值,上限值,組合大小,單個組合變量,總組合結果變量;返回值為空
      • 退出條件:單個組合變量的大小等于組合大小,此時將單個組合變量加入總組合結果變量,并返回
      • 回溯邏輯
        • 不斷地在范圍內循環遞歸求取單個組合變量
        • 循環范圍為當前值到上限值,每輪循環里:
          • 將當前值加入單個組合變量
          • 將當前值+1并遞歸
          • 執行回溯,即把單個組合變量里的最后一個值彈出,之后繼續下一輪循環
      • 剪枝優化
        • 回溯題常常可以在循環范圍上做優化
        • 本題可以把循環上限設置為上限值-(目標組合大小-當前組合大小)+2,+2是因為range函數在遍歷時不包括右邊界,所以要留出空余
  • 我的思路的問題
    • 無思路
  • 代碼書寫問題
    • 當想result變量添加單個組合變量時,要利用切片操作創建一個單個組合變量的副本并將該副本加入result,這是因為直接加入將僅僅把引用傳入到result里,后續的改動將導致result里的同步改動
  • 可執行代碼
class Solution:def backtracking(self, cur, n, k, single_set, result):if len(single_set) == k:result.append(single_set[:])returnfor i in range(cur, n - (k - len(single_set)) + 2):single_set.append(i)self.backtracking(i + 1, n, k, single_set, result)single_set.pop()def combine(self, n: int, k: int) -> List[List[int]]:result = []self.backtracking(1, n, k, [], result)return result

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

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

相關文章

alibabacloud學習筆記06(小滴課堂)

講Sentinel流量控制詳細操作 基于并發線程進行限流配置實操 在瀏覽器打開快速刷新會報錯 基于并發線程進行限流配置實操 講解 微服務高可用利器Sentinel熔斷降級規則 講解服務調用常見的熔斷狀態和恢復 講解服務調用熔斷例子 我們寫一個帶異常的接口:

6-7年經驗的前端,回望這些年的風雨,都扛過來了~

前言 回望這6-7年的時光,不覺而已,有種閱盡千帆而過的感覺,可能人總在回頭看一些事情時都會有這種感覺吧。 傻人大學開始接觸計算機行業 大概10年前的我,填好志愿,拿到錄取通知書的那天,命運的齒輪就開始…

基于Spring Boot的學生評獎評優管理系統,計算機畢業設計(帶源碼+論文)

源碼獲取地址: 碼呢-一個專注于技術分享的博客平臺一個專注于技術分享的博客平臺,大家以共同學習,樂于分享,擁抱開源的價值觀進行學習交流http://www.xmbiao.cn/resource-details/1760641819451928577

python子域名收集工具

在網絡安全領域中,發現和管理攻擊面絕對是一項必須的任務,而對域名的尋找和分析是發現攻擊面的重要步驟。今天我們將與您分享關于域名發現的四種方法,并附帶Python示例代碼來幫助您更好的理解和掌握這些方法。 1. 主域名鏈式證書提取域名信息…

MySQL的安裝和備份

一、openEuler 二進制方式安裝MySQL 8.0.x 1、獲取軟件包 [rootLocalhost ~]# wget -c https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 2、創建用戶和組 [rootLocalhost ~]# groupadd -g 27 -r mysql [rootLocalhost ~]# useradd…

RisingWave的動態過濾器和時間過濾器的用法

動態過濾器 動態過濾器能夠實時過濾數據流,并允許定義傳入數據必須滿足的條件才能進行處理。 動態過濾器demo CREATE TABLE sales(id int ,profit_margin double ,PRIMARY KEY (id) );CREATE TABLE products(product_name string ,product_profit double);--返回…

如何切換到Ubuntu系統上來

上篇講到,使用Ubuntu系統能讓人帶來積極的影響,那么如何使用上這個系統呢?其實很多時候,不是不會安裝的技術問題,而是意愿或者心理障礙的問題。 以下是我使用ubuntu系統一年半的經驗,相信經過這三部分的介紹,可以幫助你了解linux系統的最新進展,克服使用困難,使用上U…

C# 讀取JSON文件

命名空間: using System.Text.Json.Nodes; 讀取JSON: // 讀取設置文件參數 JsonNode json JsonNode.Parse(File.ReadAllText(Environment.CurrentDirectory.Replace("\\bin\\Debug", "") "\\settings.json"))["a…

前端項目git提交規范配置

項目規范管理 目的 為了使團隊多人協作更加的規范,所以需要每次在 git 提交的時候,做一次硬性規范提交,規范 git 的提交信息 使用commitizen規范git提交(交互式提交 自定義提示文案 Commit規范) 安裝依賴 pnpm install -D commitizen c…

visual studio2022使用tensorRT配置

只記錄tensorRT在vs中使用時的配置,下載和安裝的 文章主頁自己尋找。 下載好TensorRT和對應的cuda之后,把tensorRT的鍛煉了和lib文件復制粘貼到cuda對應的文件夾中,以方便調用。 完成之后打開vs新建一個tensorRT的項目,然后開始配…

306_C++_QT_創建多個tag頁面,使用QMdiArea容器控件,每個頁面都是一個新的表格[或者其他]頁面

程序目的是可以打開多個styles文件(int后綴文件),且是tag樣式的(就是可以切多個頁面出來,并且能夠單獨關閉);其中讀取ini文件,將其插入到表格中的操作,也是比較復雜的,因為需要保持RGB字符串和前面的說明字符串對齊 ini文件舉例: [MainMenu] Foreground\Selected=&…

ElasticStack安裝(windows)

官網 : Elasticsearch 平臺 — 大規模查找實時答案 | Elastic Elasticsearch Elastic Stack(一套技術棧) 包含了數據的整合 >提取 >存儲 >使用,一整套! 各組件介紹: beats 套件:從各種不同類型的文件/應用中采集數據。比如:a,b,cd,e,aa,bb,ccLogstash:…

三年功能測試,測試工作吐槽

概述 大家好,我是洋子。有很多粉絲朋友目前還是在做功能測試,日常會遇到很多繁瑣,棘手的問題,今天分享一篇在testerhome社區的帖子《三年功能測試,測試工作吐槽》 原文鏈接https://testerhome.com/topics/38546 這篇文…

vue.js el-tooltip根據文字長度控制是否提示toolTip

一、需求&#xff1a;如何判斷當前文本文字是否超出文本長度&#xff0c;是否需要出現提示toolTip。效果圖如下&#xff1a; 二、實現&#xff1a; 1、表格字段鼠標放置el-popover出現 “引用主題” 的具體內容&#xff1b; <!-- 表格字段&#xff1a;引用主題 --> <…

【web | CTF】攻防世界 Web_php_unserialize

天命&#xff1a;這條反序列化題目也是比較特別&#xff0c;里面的漏洞知識點&#xff0c;在現在的php都被修復了 天命&#xff1a;而且這次反序列化的字符串數量跟其他題目不一樣 <?php class Demo { // 初始化給變量內容&#xff0c;也就是當前文件&#xff0c;高亮顯示…

代碼隨想錄 -- 字符串

文章目錄 反轉字符串描述題解 反轉字符串II描述題解 替換數字描述題解&#xff1a;replace函數題解&#xff1a;雙指針 翻轉字符串里的單詞描述題解 右旋字符串描述題解 實現 strStr()描述題解&#xff1a;暴力算法題解&#xff1a;KMP算法(懵懂) 重復的子字符串描述題解題解&a…

數據備份(上)

備份的意義 數據備份是容災的基礎&#xff0c;防止系統出現操作失誤或者遭受網絡攻擊導致數據丟失&#xff0c;為保證數據安全和業務連續性&#xff0c;有效的防護措施&#xff0c;對數據進行合理的備份、防范于未然。 面臨的威脅 去年2023年10月親自經歷客戶某網站無法訪問…

WEB-UI自動化測試實踐

&#x1f525; 交流討論&#xff1a;歡迎加入我們一起學習&#xff01; &#x1f525; 資源分享&#xff1a;耗時200小時精選的「軟件測試」資料包 &#x1f525; 教程推薦&#xff1a;火遍全網的《軟件測試》教程 &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1…

已解決的問題:BIOS中Enter鍵失效_BIOS中回車鍵沒反應

問題&#xff1a; 未解決的問題&#xff1a;BIOS中enter鍵失效_bios回車鍵沒反應-CSDN博客 問題復現&#xff1a; Windows7 關機 開機按F2進入BIOS 調整Boot Mode&#xff0c;按Enter建&#xff0c;Enter鍵失效 按F10&#xff0c;按Enter鍵&#xff0c;Enter鍵失效 按E…

LeetCode59-螺旋矩陣II

參考鏈接&#xff1a;代碼隨想錄->螺旋矩陣II 關鍵是學視頻鏈接里面的編碼思想&#xff0c;然后背下來 class Solution { public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> resvector(n,vector<int>(n,0));int sx0,s…