回溯題解——子集【LeetCode】輸入的視角(選或不選)

78. 子集

? 一、算法邏輯講解(逐步思路)

邏輯講解:

  1. dfs(i):表示從下標 i 開始,做“選 or 不選”的子集構造。

  2. 終止條件 if i == n

    • 到達數組末尾,表示一種完整子集構造完成。

    • 把當前構造路徑 path 復制一份加入 ans

  3. 每個位置都有兩種選擇:

    • 不選當前元素:直接 dfs(i+1)

    • 選當前元素:先加入 path,然后 dfs(i+1)

    • 完成后通過 path.pop() 撤銷選擇,回溯到上一狀態。

  4. 初始從 dfs(0) 開始,表示從第一個元素開始構造子集。


? 二、核心思路(算法關鍵點)

核心點是:使用 DFS + 回溯 來枚舉所有子集

  • 每個元素有兩個選擇:選 or 不選。

  • 用 DFS 的遞歸樹遍歷所有選擇路徑。

  • 每條路徑就是一個合法子集。

  • 通過 path.pop() 回溯上一步,探索下一個可能性。

這是一種更容易理解、便于剪枝的通用枚舉方式,相比位運算法更直觀(適合初學者理解和復雜問題擴展)。

class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:ans = []n = len(nums)path = []def dfs(i:int) -> None:if i == n:ans.append(path.copy())returndfs(i+1)path.append(nums[i])dfs(i+1)path.pop()dfs(0)return ans

? 三、時間復雜度分析

時間復雜度:O(n * 2^n)

  • 一共會遞歸 2^n 次(每個元素選 or 不選)。

  • 每次遞歸最多生成一個子集,長度最多為 n,需要復制(path.copy())。

  • 所以整體復雜度為 O(n * 2^n)


💾 四、空間復雜度分析

空間復雜度:O(n) + O(n * 2^n)

  1. 遞歸棧空間:O(n)

    • 遞歸深度最大為 n,每層遞歸函數棧消耗是常量級。

  2. 輸出空間:O(n * 2^n)

    • 一共 2^n 個子集,每個子集長度最多為 n

  3. 臨時變量 pathO(n)

    • 存儲當前路徑,最大長度為 n

如果只考慮「輔助空間」,則是 O(n)(遞歸 + path)。

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

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

相關文章

使用Electron開發跨平臺本地文件管理器:從入門到實踐

在當今數字化時代,文件管理是每個計算機用戶日常工作中不可或缺的一部分。雖然操作系統都提供了自己的文件管理器,但開發一個自定義的文件管理器可以帶來更好的用戶體驗、特定功能的集成以及跨平臺的一致性。本文將詳細介紹如何使用Electron框架構建一個…

JBHI 2025 | 潛在擴散模型賦能胸部X射線骨抑制

Abstract: 肺部疾病是全球健康面臨的一項重大挑戰,胸部 X 光檢查(CXR)因其方便性和經濟性而成為一種重要的診斷工具。 然而,CXR 圖像中重疊的骨結構往往會阻礙肺部病變的檢測,從而導致潛在的誤診。 為解決這一問題&am…

408第三季part2 - 計算機網絡 - 計算機網絡基本概念

理解然后區分一下這2個區別特點是建立連接存儲轉發的意思是A先發給B,B再發給C,就這樣這里缺點比如A很大,你給B緩存開銷大還需要排序然后形象的圖題目分組頭部要放一些源地址和目的地址這些東西以后發數據只會往近的發,不可能往下面…

互補功率放大器Multisim電路仿真——硬件工程師筆記

目錄 1 互補功率放大器基礎知識 1.1 工作原理 1.2 電路結構 1.3 優點 1.4 缺點 1.5 應用 1.6 總結 2 OCL乙類互補功率放大電路 2.1 電路結構 2.2 工作原理 2.3 優點 2.4 缺點 2.5 總結 3 OCL甲乙類互補功率放大電路 3.1 電路結構 3.2 工作原理 3.3 優點 3.4 …

【1】確認安裝 Node.js 和 npm版本號

搭建前端項目時需要安裝 Node.js 和 npm,主要是因為它們提供了一些重要的功能和工具,幫助開發者高效地開發、構建和管理項目。一、具體原因如下: Node.js:JavaScript 運行環境 Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運…

7、從網絡中獲取數據

目錄 訂閱網絡狀態變化創建網絡對象獲取默認激活網絡及其能力可訂閱事件可訂閱事件——網絡可用事件可訂閱事件——網絡阻塞狀態事件可訂閱事件——網絡能力變化事件可訂閱事件——網絡連接信息變化事件可訂閱事件——網絡丟失事件常見事件訂閱場景 開發流程 使用HTTP訪問網絡發…

搭建個人博客系列--docker

因為后續所有的組件都會在docker上安裝,所以要先安裝docker。一、安裝docker1.配置yumyum install -y yum-utilsyum makecache fast2.卸載老dockeryum remove docker3.配置鏡像地址yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos…

【Note】《Kafka: The Definitive Guide》 第5章:深入 Kafka 內部結構,理解分布式日志系統的核心奧秘

《Kafka: The Definitive Guide》 第5章:深入 Kafka 內部結構,理解分布式日志系統的核心奧秘 Apache Kafka 在表面上看似只是一個“分布式消息隊列”,但其背后的存儲架構、分區機制、復制策略與高性能設計,才是它在千萬級 TPS 場景…

當“漏洞”成為雙刃劍——合法披露與非法交易的生死線在哪里?

首席數據官高鵬律師數字經濟團隊創作,AI輔助 一、一場“漏洞”的博弈:從“手術刀”到“毒藥”的分界 2025年夏,某電商平臺因系統漏洞被曝光,引發輿論風暴。白帽子甲在發現漏洞后,第一時間聯系平臺技術團隊&#xff0…

Hadoop 分布式存儲與計算框架詳解

Hadoop開發實戰:https://www.borimooc.com/course/1004.htm hadoop是適合海量數據的分布式存儲,和分布式計算的框架 hadoop有三大組件: mapreduce:適合海量數據的分布式計算,分為map階段、shuffle階段和reduce階段hdfs:分布式文…

LeetCode 2099.找到和最大的長度為 K 的子序列:自定義排序

【LetMeFly】2099.找到和最大的長度為 K 的子序列:自定義排序 力扣題目鏈接:https://leetcode.cn/problems/find-subsequence-of-length-k-with-the-largest-sum/ 給你一個整數數組 nums 和一個整數 k 。你需要找到 nums 中長度為 k 的 子序列 &#x…

循環移位網絡設計

總體架構 模塊描述 循環移位網絡模塊(模塊名:VAL_CS_PROC),對輸入數據(in_data)做循環移位處理,兩個cycle即可輸出數據。 Fig 1 循環移位模塊頂層 設計要求 00】 支持對data_num個有效數據做…

IO進程線程(IPC通訊)

目錄 一、IPC通訊機制 1)傳統的通訊機制: 2)systemV 的通訊機制: 3)跨主機的通訊機制: 1、無名管道 1)無名管道的概念 2)無名管道的函數 3)無名管道通訊&#xf…

Webpack 5 核心機制詳解與打包性能優化實踐

🤖 作者簡介:水煮白菜王,一個web開發工程師 👻 👀 文章專欄: 前端專欄 ,記錄一下平時在博客寫作中,總結出的一些開發技巧和知識歸納總結?。 感謝支持💕💕&am…

Manus AI與多語言手寫識別

技術文章大綱:Manus AI與多語言手寫識別 引言 手寫識別技術的發展背景與市場需求Manus AI的定位與核心技術優勢多語言場景下的挑戰與機遇 Manus AI的核心技術架構 基于深度學習的端到端手寫識別模型多模態數據融合(筆跡壓力、書寫軌跡等)…

Go與Python爬蟲對比及模板實現

go語言和Python語言都可選作用來爬蟲項目,因為python經過十幾年的累積,各種庫是應有盡有,學習也相對比較簡單,相比GO起步較晚還是有很大優勢的,么有對比就沒有傷害,所以我利用一個下午,寫個Go爬…

Vidwall: 支持將 4K 視頻設置為動態桌面壁紙,兼容 MP4 和 MOV 格式

支持將 4K 視頻設置為動態桌面壁紙,兼容 MP4 和 MOV 格式。只需將視頻拖入應用界面,點擊即可立即應用為桌面背景。 為桌面增添生動趣味的動態壁紙效果!錄制視頻時設置動態背景,也能讓畫面更吸引人。 📥 https://apps.…

【LeetCode 熱題 100】234. 回文鏈表——快慢指針+反轉鏈表

Problem: 234. 回文鏈表 題目:給你一個單鏈表的頭節點 head ,請你判斷該鏈表是否為回文鏈表。如果是,返回 true ;否則,返回 false 。 文章目錄 整體思路完整代碼時空復雜度時間復雜度:O(N)空間復雜度&#…

【源力覺醒 創作者計劃】開源、易用、強中文:文心一言4.5或是 普通人/非AI程序員 的第一款中文AI?

前言 你有沒有發現,AI 正在悄悄滲透進我們的生活:寫文案、畫插圖、做PPT、答作業,它幾乎無所不能😍 !但很多人可能會問: AI,我能用嗎?用得起嗎?適合我嗎?特別…

【保姆級喂飯教程】Git圖形化客戶端Sourcetree安裝及使用教程

目錄 前言一、SourceTree簡介二、安裝教程三、使用教程1. 添加倉庫 四、評價總結后記參考文獻 前言 在查找Git Flow實現工具的時候,看到了SourceTree,支持Git Flow、GitHub Flow等多種Git工作流,安裝簡單學習一下。 一、SourceTree簡介 Git的…