77.組合問題

主函數?combine
def combine(self, n: int, k: int) -> List[List[int]]:result = []  # 存放所有有效的組合self.backtracking(n, k, 1, [], result)  # 從數字1開始搜索return result
  • 作用:初始化并啟動回溯過程。
  • 參數
    • n=4:數字范圍是1到4。
    • k=2:每個組合需要2個數字。
  • 過程
    1. 創建空列表?result?存儲結果。
    2. 調用?backtracking?開始遞歸搜索。
回溯函數?backtracking
def backtracking(self, n, k, startIndex, path, result):if len(path) == k:          # 終止條件:當前組合已選夠k個數result.append(path[:])   # 將當前組合存入結果returnfor i in range(startIndex, n + 1):  # 遍歷可選數字path.append(i)           # 選擇當前數字iself.backtracking(n, k, i + 1, path, result)  # 遞歸處理下一個數字path.pop()               # 回溯:撤銷選擇i

具體執行步驟(以?n=4, k=2?為例)

1. 主函數調用?backtracking(4, 2, 1, [], result)
  • startIndex = 1,?path = []
  • 進入循環?for i in range(1, 5):
    • i = 1:

      • path.append(1)?→?path = [1]
      • 遞歸調用?backtracking(4, 2, 2, [1], result):
        • startIndex = 2,?path = [1]
        • 子循環?for i in range(2, 5):
          • i = 2:
            • path.append(2)?→?path = [1, 2]
            • path = [1]
              path.append(2)       # path = [1,2]
              # 現在調用 backtracking(n,k,3,[1,2],result)
              # ↓ 進入新的遞歸層級
              if len([1,2]) == 2:  # 立刻觸發檢查!result.append([1,2])return           # 直接返回,不會繼續后面的循環
              # 回到上一層
              path.pop()          # path恢復為[1]

              對下面的解釋

            • 滿足?len(path) == 2:
              • result.append([1, 2])?→?result = [[1, 2]]
            • path.pop()?→?path = [1]?(回溯)
          • i = 3:
            • path.append(3)?→?path = [1, 3]
            • 滿足?len(path) == 2:
              • result.append([1, 3])?→?result = [[1, 2], [1, 3]]
            • path.pop()?→?path = [1]?(回溯)
          • i = 4:
            • path.append(4)?→?path = [1, 4]
            • 滿足?len(path) == 2:
              • result.append([1, 4])?→?result = [[1, 2], [1, 3], [1, 4]]
            • path.pop()?→?path = [1]?(回溯)
        • 子遞歸結束,返回上一層。
      • path.pop()?→?path = []?(回溯)
    • i = 2:

      • path.append(2)?→?path = [2]
      • 遞歸調用?backtracking(4, 2, 3, [2], result):
        • startIndex = 3,?path = [2]
        • 子循環?for i in range(3, 5):
          • i = 3:
            • path.append(3)?→?path = [2, 3]
            • 滿足?len(path) == 2:
              • result.append([2, 3])?→?result = [[1, 2], [1, 3], [1, 4], [2, 3]]
            • path.pop()?→?path = [2]?(回溯)
          • i = 4:
            • path.append(4)?→?path = [2, 4]
            • 滿足?len(path) == 2:
              • result.append([2, 4])?→?result = [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4]]
            • path.pop()?→?path = [2]?(回溯)
        • 子遞歸結束,返回上一層。
      • path.pop()?→?path = []?(回溯)
    • i = 3:

      • path.append(3)?→?path = [3]
      • 遞歸調用?backtracking(4, 2, 4, [3], result):
        • startIndex = 4,?path = [3]
        • 子循環?for i in range(4, 5):
          • i = 4:
            • path.append(4)?→?path = [3, 4]
            • 滿足?len(path) == 2:
              • result.append([3, 4])?→?result = [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
            • path.pop()?→?path = [3]?(回溯)
        • 子遞歸結束,返回上一層。
      • path.pop()?→?path = []?(回溯)
    • i = 4:

      • path.append(4)?→?path = [4]
      • 遞歸調用?backtracking(4, 2, 5, [4], result):
        • startIndex = 5?>?n = 4,直接返回,不處理。
      • path.pop()?→?path = []?(回溯)

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

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

相關文章

Oracle免費認證來襲

1、Oracle Cloud Infrastructure 2025 Foundations Associate” 🔗 考證地址:https://mylearn.oracle.com/ou/exam-unproctored/oracle-cloud-infrastructure-2025-foundations-associate-1z0-1085-25/148056/241954 2、Oracle Cloud Infrastructure 2…

【Unet++】

這是一篇關于語義分割U-net及其變體網絡結構的介紹性文章,主要介紹了U-net、U-net以及U-net的基本結構、特點和應用。 以下是對這些核心內容的簡要概述: 1. 語義分割U-net概述: - 基本結構:U-net是一種編碼解碼結構的網絡,起初…

git可視化工具Fork軟件的詳細使用教程

Fork是一款流行的Git圖形化客戶端,適用于Windows和macOS平臺。使用起來確實很方便,唯一的缺陷就是正版需要付費使用! Fork 安裝 官網下載地址:Fork官網地址https://git-fork.com/ 支持 macOS 和 Windows。 安裝完成后&#xff…

【JMeter技巧】GET請求如何傳遞Body參數?版本兼容性詳解場景需求

在實際接口測試中,有時會遇到特殊需求:需要給GET請求傳遞Body參數。但JMeter默認配置下,GET請求的Body數據會被自動忽略。本文將介紹如何通過配置解決這個問題。 配置步驟 1. 版本要求(重要!) JMeter ≥ …

HTML5好看的水果蔬菜在線商城網站源碼系列模板9

文章目錄 1.設計來源1.1 主界面1.2 商品界面1.3 購物車界面1.4 心愿列表界面1.5 商品信息界面1.6 博客界面1.7 關于我們界面1.8 聯系我們界面1.9 常見問題界面1.10 登錄界面 2.效果和源碼2.1 動態效果2.2 源代碼 源碼下載萬套模板,程序開發,在線開發&…

es 里的Filesystem Cache 理解

文章目錄 背景問題1,Filesystem Cache 里放的是啥問題2,哪些查詢它們會受益于文件系統緩存問題3 查詢分析 背景 對于es 優化來說常常看到會有一條結論給,給 JVM Heap 最多不超過物理內存的 50%,且不要超過 31GB(避免壓…

存儲器:DDR和獨立顯卡的GDDR有什么區別?

本文來簡要對比DDR(Double Data Rate SDRAM)和GDDR(Graphics Double Data Rate SDRAM)的區別,重點說明它們在設計、性能和應用上的差異: 1. 設計目標與架構 DDR:通用型DRAM,設計為…

【Electron】electron-vue 借助 element-ui UI 庫助力桌面應用開發

前面文章我們講過 electron 讓可以用 HTML、JS、CSS 開發桌面應用程序。而 electron-vue 是一個結合了 electron 與 vue 的套件。這樣我們就能方便地使用 vue 快速開發桌面應用。但是,vue 只是在 js 這層面做了大量的便捷的操作。對 UI 并未過多涉及。此時如果您在開…

Linux/AndroidOS中進程間的通信線程間的同步 - 消息隊列

本文介紹消息隊列,它允許進程之間以消息的形式交換數據。數據的交換單位是整個消息。 POSIX 消息隊列是引用計數的。只有當所有當前使用隊列的進程都關閉了隊列之后才會對隊列進行標記以便刪除。POSIX 消息有一個關聯的優先級,并且消息之間是嚴格按照優…

深入理解進程與線程、進程池與線程池:企業級開發實戰指南

簡介 并發編程是現代軟件開發的核心能力,而進程與線程、進程池與線程池是實現高效并發的關鍵技術。 本文將從基礎概念出發,深入解析它們的工作原理、優勢及適用場景,并提供Python、Java、C#等主流語言的實戰代碼,幫助開發者掌握企業級并發編程的最佳實踐。 一、進程與線程…

解鎖 LLM 推理速度:深入 FlashAttention 與 PagedAttention 的原理與實踐

寫在前面 大型語言模型 (LLM) 已經滲透到我們數字生活的方方面面,從智能問答、內容創作到代碼輔助,其能力令人驚嘆。然而,驅動這些強大模型的背后,是對計算資源(尤其是 GPU)的巨大需求。在模型推理 (Inference) 階段,即模型實際對外提供服務的階段,速度 (Latency) 和吞…

Go使用Gin寫一個對MySQL的增刪改查服務

首先用SQL創建一個包含id、name屬性的users表 create table users (id int auto_incrementprimary key,name varchar(255) null );查詢所有用戶信息: func queryData(db *sql.DB, w http.ResponseWriter) {rows, err : db.Query("SELECT * FROM users"…

鍵盤彈起導致頁面上移

問題:聊天頁面,如果輸入框設置了adjust-position屬性為true,會導致鍵盤彈起時,整個頁面上移,頂部導航欄也會跟著上移。 我想要的效果:鍵盤彈起時,頁面內容上移,頂部導航欄保持不動 …

機器視覺的手機FPC油墨絲印應用

在現代智能手機制造過程中,精密的組件裝配和質量控制是確保產品性能和用戶體驗的關鍵。其中,柔性印刷電路板(FPC)的油墨絲印工藝尤為關鍵,它不僅影響到電路板的美觀,更直接關系到電路的導電性能和可靠性。而…

ChromeDriverManager的具體用法

ChromeDriverManager 是 webdriver_manager 庫的一部分,它用于自動管理 ChromeDriver 的下載和更新。使用 ChromeDriverManager 可以避免手動下載 ChromeDriver 并匹配系統中安裝的 Chrome 瀏覽器版本。以下是 ChromeDriverManager 的基本用法: 步驟 1…

RPC、gRPC和HTTP的區別

RPC 只是一種屏蔽遠程過程調用的設計,它與HTTP不是對立的,兩者不是一個層面的概念。 RPC底層通信可以使用TCP實現(如Thrift),也可以使用HTTP實現(如gRPC),其本身并無限制。 1. 概念…

安裝Pod網絡插件時pod狀態變為ImagePullBackOff

本文摘自于我的免費專欄《Kubernetes從0到1(持續更新)》請多關注 文章目錄 先看案發現場解決過程如下原因剖析解決方法 先看案發現場 原因是在下載Pod網絡插件的時候pod始終為ImagePullBackOff wget https://raw.githubusercontent.com/coreos/flannel…

藍橋杯第十六屆c組c++題目及個人理解

本篇文章只是部分題目的理解&#xff0c;代碼和思路僅供參考&#xff0c;切勿當成正確答案&#xff0c;歡迎各位小伙伴在評論區與博主交流&#xff01; 題目&#xff1a;2025 題目解析 核心提取 要求的數中至少有1個0、2個2、1個5 代碼展示 #include<iostream> #incl…

使用mermaidchart 顯示graph LR

使用mermaidchart 顯示graph LRMermaid Chart - Create complex, visual diagrams with text. A smarter way of creating diagrams.

基于計算機視覺的試卷答題區表格識別與提取技術

基于計算機視覺的試卷答題區表格識別與提取技術 摘要 本文介紹了一種基于計算機視覺技術的試卷答題區表格識別與提取算法。該算法能夠自動從試卷圖像中定位答題區表格&#xff0c;執行圖像方向矯正&#xff0c;精確識別表格網格線&#xff0c;并提取每個答案單元格。本技術可…