代碼隨想錄算法訓練營第二十四天 | 77. 組合

回溯算法理論基礎

https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
回溯法也可以叫做回溯搜索法,它是一種搜索的方式
回溯是遞歸的副產品,只要有遞歸就會有回溯。
回溯法并不是什么高效的算法 =>本質是窮舉,窮舉所有可能,然后選出我們想要的答案,如果想讓回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是窮舉的本質。
回溯法,一般可以解決如下幾種問題:

  • 組合問題:N個數里面按一定規則找出k個數的集合
  • 切割問題:一個字符串按一定規則有幾種切割方式
  • 子集問題:一個N個數的集合里有多少符合條件的子集
  • 排列問題:N個數按一定規則全排列,有幾種排列方式
  • 棋盤問題:N皇后,解數獨等等
    所有回溯法的問題都可以抽象為樹形結構
回溯三部曲
  • 回溯函數模板返回值以及參數 - backtracking
  • 回溯函數終止條件 - 搜到葉子節點了,也就找到了滿足條件的一條答案,把這個答案存放起來,并結束本層遞歸
    if (終止條件) {存放結果;return;
    }
    
  • 回溯搜索的遍歷過程 - 集合的大小構成了樹的寬度,遞歸的深度構成的樹的深度。
    for (選擇:本層集合中元素(樹中節點孩子的數量就是集合的大小)) {處理節點;backtracking(路徑,選擇列表); // 遞歸回溯,撤銷處理結果
    }
    

for循環就是遍歷集合區間,可以理解一個節點有多少個孩子,這個for循環就執行多少次。
backtracking這里自己調用自己,實現遞歸。
大家可以從圖中看出for循環可以理解是橫向遍歷,backtracking(遞歸)就是縱向遍歷,這樣就把這棵樹全遍歷完了,一般來說,搜索葉子節點就是找的其中一個結果了。
![[Pasted image 20240301152922.png]]
完整模板:

void backtracking(參數) {if (終止條件) {存放結果;return;}for (選擇:本層集合中元素(樹中節點孩子的數量就是集合的大小)) {處理節點;backtracking(路徑,選擇列表); // 遞歸回溯,撤銷處理結果}
}

77.組合

https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html

class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result = []self.backtracking(n,k,1,[],result)return resultdef backtracking(self, n, k, startIndex, path, result):if len(path) == k:result.append(path[:])returnfor i in range(startIndex, n+1):path.append(i)self.backtracking(n,k,i+1,path,result)path.pop()

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

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

相關文章

馬斯克正式起訴OpenAI和奧特曼!

就在剛剛,馬斯克鬧出來一件大事——正式起訴OpenAI和Sam Altman,并要求OpenAI 恢復開源GPT-4等模型! 眾所周知,馬斯克這兩年一只在推特上指責 OpenAI是CloseAI(不開源),但都只是停留在口頭上。 而這次馬斯克動了真格。…

nginx if 指令

目錄 nginx if 指令直接判斷變量判斷是否等于字符串判斷變量是否匹配正則表達式文件及目錄判斷示例1:判斷index.html是否存在示例2:判斷URL中是否存在某個參數Parameter示例3:判斷URI中是否為某個特定路徑示例4:開放白名單內的功能…

從0開始python學習-53.python中flask創建簡單接口

目錄 1. 創建一個簡單的請求,沒有寫方法時默認為get 2. 創建一個get請求 3. 創建一個post請求,默認可以使用params和表單傳參 4. 帶有參數的post請求 1. 創建一個簡單的請求,沒有寫方法時默認為get from flask import Flask, request# 初始化一個flask的對象 ap…

RK3566 linux iperf網絡測試

一、開發環境 系統:buildroot; 在Linux目標板和Windows PC上運行iperf進行測試; 二、調試 1、查詢目標板上的iperf 使用終端助手連接目標板,然后輸入命令查詢iperf的版本: rootrk3566-buildroot:~# iperf -v iperf version …

圖數據庫 之 Neo4j - 應用場景3 - 知識圖譜(8)

背景 知識圖譜的復雜性:知識圖譜通常包含大量的實體、關系和屬性,以及它們之間的復雜關聯。傳統的關系型數據庫在處理這種復雜性時可能面臨性能和靈活性的挑戰。 圖數據庫的優勢:圖數據庫是一種專門用于存儲和處理圖結構數據的數據庫。它們使用節點和邊來表示實體和關系,并…

USB - Battery Charing

Getting to the bottom of USB Battery Charging (了解 USB 電池充電的真相) 如今,幾乎所有帶電池的產品都被期望支持 BC1.2 USB 充電標準。 Today, almost every product with a battery is expected to support the BC1.2 standard for USB charging. 這對消費者來…

詳解字符串函數<string.h>(上)

1. strlen函數的使用和模擬實現 size_t strlen(const char* str); 1.1 函數功能以及用法 字符串長度 strlen函數的功能是計算字符串的長度。在使用時&#xff0c;要求用戶傳入需要計算長度的字符串的起始位置&#xff0c;并返回字符串的長度。 #include <stdio.h> #…

基于SSM醫院電子病歷管理系統的設計與實現(源代碼+數據庫腳本+萬字文檔+PPT)

系統介紹 醫院電子病歷管理系統主要是借助計算機&#xff0c;通過對醫院電子病歷管理系統所需的信息管理&#xff0c;增加用戶的選擇&#xff0c;同時也方便對廣大用戶信息的及時查詢、修改以及對用戶信息的及時了解。醫院電子病歷管理系統 對用戶帶來了更多的便利&#xff0c…

Python GUI自動化定位代碼參考

一、pyautogui原始邏輯 import pyautogui # 獲取指定圖片在屏幕上的位置 image_path path/to/image.png target_position pyautogui.locateCenterOnScreen(image_path) if target_position is not None: # 獲取偏移量 offset_x 10 offset_y 10 # 計算實際點…

一文讀懂ZKFair PFP-CyberArmy的參與價值與潛力

3月2日&#xff0c;ZKFair PFP-CyberArmy 將在 Element 上正式開始Public Sale。

文件基礎和文件fd

文章目錄 預備知識C語言的文件接口系統調用文件fd 正文開始前給大家推薦個網站&#xff0c;前些天發現了一個巨牛的 人工智能學習網站&#xff0c; 通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。 點擊跳轉到網站。 預備知識 我們平時說文件就是說文件里…

1_Springboot(一)入門

Springboot&#xff08;一&#xff09;——入門 本章重點&#xff1a; 1.什么是Springboot; 2.使用Springboot搭建web項目&#xff1b; 一、Springboot 1.Springboot產生的背景 Servlet->Struts2->Spring->SpringMVC&#xff0c;技術發展過程中&#xff0c;對使…

大模型量化技術原理-SmoothQuant

近年來&#xff0c;隨著Transformer、MOE架構的提出&#xff0c;使得深度學習模型輕松突破上萬億規模參數&#xff0c;從而導致模型變得越來越大&#xff0c;因此&#xff0c;我們需要一些大模型壓縮技術來降低模型部署的成本&#xff0c;并提升模型的推理性能。 模型壓縮主要分…

強化學習(六)時序差分

時序差分&#xff08;TD&#xff09;是強化學習的核心&#xff0c;其是蒙特卡羅&#xff08;MC&#xff09;和動態規劃&#xff08;DP&#xff09;的結合。 1、TD 預測 TD 和 MC 都是利用經驗來解決預測問題。一種非平穩環境的一般訪問蒙特卡羅方法是 V ( S t ) ← V ( S t …

Python GUI開發庫之nicegui使用詳解

概要 在 Python 中,創建圖形用戶界面(GUI)應用程序通常需要大量的代碼和時間。然而,隨著 Python 生態系統的不斷發展,出現了一些簡化 GUI 開發過程的工具和庫。其中之一就是 NiceGUI 庫。本文將深入探討 NiceGUI 庫的功能、用法以及如何利用它來創建漂亮而功能豐富的 GUI…

如何使用css實現一個加載動畫

如何使用css實現一個加載動畫 有四個點 初始化為同一個顏色 每個階段 不同的透明度 刷新也不會影響初始化 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthd…

List 集合遍歷過程中刪除元素避坑指南。

文章目錄 1. 遍歷2. 遍歷過程中刪除元素2.1 for 簡單循環正向遍歷方式2.2 for 簡單循環反向遍歷方式2.3 foreach 方式遍歷刪除2.4 Iterator的remove()方法2.5 <font color green> removeIf() &#xff08;推薦&#xff09;<green>2.6 Strem 方式 作為一名后端開發…

python之計算CPI

CPI&#xff0c;即消費者物價指數&#xff08;Consumer Price Index&#xff09;&#xff0c;是一個反映居民家庭一般所購買的消費品和服務項目價格水平變動情況的宏觀經濟指標。它是在特定時段內度量一組代表性消費商品及服務項目的價格水平隨時間而變動的相對數&#xff0c;通…

網絡測試相關

前言 網絡測試通常是指在網絡環境比較復雜&#xff0c;而且有較多限制時&#xff0c;就需要清楚網絡的走向和途徑的節點&#xff0c;便于在出現問題時進行排查和優化網絡性能&#xff0c;相關知識大多是計算機網絡的 測試工具 抓包 wireshark 路由探測 traceroute/tracert 這…

云快充充電樁系統設計書

充電樁系統設計書 一、系統設計概述 隨著新能源汽車市場的快速發展&#xff0c;充電樁作為電動汽車的重要配套設施&#xff0c;其市場需求日益增長。本系統旨在提供一套穩定、高效、易用的充電樁解決方案&#xff0c;以滿足市場上新能源充電樁的主流需求。通過實現云快充V1.6協…