leetcode hot100刷題日記——35.子集

在這里插入圖片描述
解答:

方法一:選or不選的dfs(輸入視角)

思路:[1,2,3]的全部子集可以看成是對數組的每一位數字做選擇。
eg.空集就是一個數字都不選,[1,2]就是1,2選,3不選。

class Solution {
public:vector<vector<int>> res;//存所有結果用的vector<int> path;//存單個結果void dfs(vector<int>&nums,int pos,int size){if(pos==size){//遍歷到了數組的最后,做完了所有的選擇,為什么size是n前面的日記解釋過了~res.emplace_back(path);//把單個結果放進總結果里面,注意emplace_back函數,之前也出現過幾次了return;}//對于單個數字,我們的選擇有兩種//1.選path.push_back(nums[pos]);//放進單個數組dfs(nums,pos+1,size);//做好選擇后再去做下一個選擇path.pop_back();//回溯的精髓,恢復原狀//2.不選dfs(nums,pos+1,size);//直接做下一個選擇	}vector<vector<int>> subsets(vector<int>& nums) {int size=nums.size();dfs(nums,0,size);return res;}
};

時間復雜度:O(n2^n)
空間復雜度:O(n)

方法二:選or不選的dfs(輸出視角)

思路:如果選了數組的某一位添加到答案末尾,那么下一個要添加到答案末尾的數,就要在這個某一位后面的數字中枚舉了。用循環來幫忙

舉個例子哦,對于子集[1,2,3]來說,從1開始思考,1要不要在我的子集里面,要的話那就放進去,不要的話那就恢復現場
再接著考慮下一位2……

class Solution {
public:vector<vector<int>> res;//存所有結果用的vector<int> path;//存單個結果void dfs(vector<int>&nums,int pos,int size){res.emplace_back(path);//每次做完這個數要不要選的結果都放進去總結果里面//從path的當前位置開始考慮要不要選for(int i=pos;i<size;i++){path.push_back(nums[i]);//要選dfs(nums,i+1,size);//下一個開始選擇path.pop_back();//恢復現場}}vector<vector<int>> subsets(vector<int>& nums) {int size=nums.size();dfs(nums,0,size);return res;}
};

時間復雜度:O(n2^n)
空間復雜度:O(n)

方法三:二進制枚舉
使用位運算來高效枚舉所有可能的組合
比如[1,2,3],我們枚舉xxx所有的二進制可能(000,001,010……)如果是000就是空集,001就是把3放進去,010就是放2……

二進制數對應的這一位是1就相當于選這位數,0就是不選。

class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {int n=nums.size();vector<vector<int>> res(1<<n);//一共1<<n種結果//i是結果數,j是位數for(int i=0;i<(1<<n);i++){for(int j=0;j<n;j++){// 判斷第j位是否為1if(i>>j&1)res[i].push_back(nums[j]);//是1的話就放進去結果}} return res;}
};

時間復雜度:O(n2^n)
空間復雜度:O(1)

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

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

相關文章

華為OD機試真題——生成哈夫曼樹(2025A卷:100分)Java/python/JavaScript/C/C++/GO六種最佳實現

2025 A卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式! 本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》 華為OD機試真題《生成…

房屋租賃系統 Java+Vue.js+SpringBoot,包括房屋類型、房屋信息、預約看房、合同信息、房屋報修、房屋評價、房主管理模塊

房屋租賃系統 JavaVue.jsSpringBoot&#xff0c;包括房屋類型、房屋信息、預約看房、合同信息、房屋報修、房屋評價、房主管理模塊 百度云盤鏈接&#xff1a;https://pan.baidu.com/s/1KmwOFzN9qogyaLQei3b6qw 密碼&#xff1a;l2yn 摘 要 社會的發展和科學技術的進步&#xf…

Unity 中 Update、FixedUpdate 和 LateUpdate 的區別及使用場景

在Unity開發中,Update、FixedUpdate 和 LateUpdate 是生命周期函數中最常見也最容易混淆的一組。 一、調用時機 方法名調用頻率調用時機說明Update()每幀調用一次跟隨幀率(幀率高則調用頻率高)FixedUpdate()固定時間間隔調用默認每 0.02 秒執行一次LateUpdate()每幀調用一次…

Docker鏡像之windows系統

https://github.com/dockur/windows 在 Docker 容器中運行 Windows 功能 ISO 下載器KVM 加速基于網頁的查看器 使用方法 啟動容器并通過瀏覽器連接到端口 8006。整個安裝過程將全自動完成&#xff0c;無需手動干預。當桌面界面出現時&#xff0c;表示 Windows 安裝已完成&a…

C# 用戶控件(User Control)詳解:創建、使用與最佳實踐

在C#應用程序開發中&#xff0c;用戶控件&#xff08;User Control&#xff09;是一種強大的工具&#xff0c;它允許開發者將多個標準控件組合成一個可復用的自定義組件。無論是Windows Forms還是WPF&#xff0c;用戶控件都能顯著提高UI開發的效率&#xff0c;減少重復代碼&…

pikachu靶場通關筆記09 XSS關卡05-DOM型XSS-X

目錄 一、XSS 二、DOM型XSS 三、源碼分析 1、打開DOM-X型XSS關卡 2、XSS探測 3、源碼分析 四、滲透實戰 1、Payload1 2、Payload2 3、Payload3 五、DOM型XSS與DOM-X型XSS區別 本系列為通過《pikachu靶場通關筆記》的XSS攻擊關卡(共10關&#xff09;滲透集合&#xf…

湖北理元理律所:企業債務重組中的“法律緩沖帶”設計

一、擔保鏈危機的法律拆解技術 中小企業債務困局多源于擔保鏈蔓延。本所處理某制造企業案例時&#xff0c;運用三層法律工具阻斷風險傳導&#xff1a; 1. 主合同審查 → 發現銀行擅自變更借款用途 → 援引《民法典》第695條解除擔保 2. 股東責任切割 → 證明企業財產獨立 …

調整數據集的方法

我們對worldquant中的數據&#xff0c; 對數據頻率怎么算 在 WorldQuant 平臺中&#xff0c;數據更新頻率是影響量化策略有效性、回測準確性和實盤交易表現的核心因素之一。它決定了數據的時效性和連續性&#xff0c;直接關系到策略能否捕捉市場動態、應對突發事件或適應不同…

[Linux] Linux 系統從啟動到驅動加載

Linux 系統從啟動到驅動加載 文章目錄 Linux 系統從啟動到驅動加載一、硬件上電與 BIOS/UEFI 階段1. 1 硬件上電初始化1.2 BIOS/UEFI執行過程1.3 Bootloader加載細節 二、Bootloader 階段三、Linux 內核初始化3.1 架構相關初始化&#xff08;setup_arch&#xff09;3.2 核心子系…

Spring Boot DevTools 熱部署

在Spring Boot項目中加入 spring-boot-devtools 熱部署依賴啟動器后&#xff0c;通常不需要手動重啟項目即可讓更改生效。spring-boot-devtools 的核心特性之一就是自動重啟或熱加載。 Spring Boot DevTools 熱部署關鍵知識點 &#x1f525; 目的&#xff1a;spring-boot-devt…

uni-app學習筆記十五-vue3頁面生命周期(二)

onShow&#xff1a;用于監聽頁面顯示&#xff0c;頁面每次出現在屏幕上都觸發&#xff0c;包括從下級頁面點返回露出當前頁面&#xff1b; onHide:監聽頁面隱藏&#xff0c;當離開當前頁面時觸發。 示例代碼&#xff1a; <template><view>姓名&#xff1a;{{nam…

LIKE ‘%xxx%‘ 和 LIKE ‘xxx%‘ 的索引影響分析

LIKE ‘%xxx%’ 和 LIKE ‘xxx%’ 的索引影響分析 一、基礎概念解析 1.1 LIKE操作符的工作原理 LIKE是SQL中用于模式匹配的操作符,支持兩種通配符: %:匹配任意數量字符(包括零個字符)_:匹配單個字符go專欄:https://duoke360.com/tutorial/path/golang 1.2 數據庫索引…

【軟件測試】測試框架(unittest/pytest)

本文介紹了Python 中最常用的兩個測試框架&#xff1a;unittest 和 pytest&#xff0c;幫助你編寫更規范、可維護的自動化測試用例。 一、unittest 框架 unittest 是 Python 內置的標準庫&#xff0c;無需額外安裝&#xff0c;適合初學者入門。它借鑒了 JUnit 的設計理念&…

麒麟信安安裝谷歌瀏覽器

參考文檔 麒麟信安系統Chrome離線安裝包&#xff1a;高效便捷的瀏覽器解決方案-CSDN博客 項目文件預覽 - 麒麟信安系統Chrome離線安裝包:本倉庫提供了一個適用于麒麟信安系統的Chrome瀏覽器離線安裝包。該安裝包包含了所有必要的依賴文件&#xff0c;并且已經對系統中已有的依…

Wireshark 使用教程:讓抓包不再神秘

一、什么是 tshark&#xff1f; tshark 是 Wireshark 的命令行版本&#xff0c;支持幾乎所有 Wireshark 的核心功能。它可以用來&#xff1a; 抓包并保存為 pcap 文件 實時顯示數據包信息 提取指定字段進行分析 配合 shell 腳本完成自動化任務 二、安裝與驗證 Kali Linux…

從0到1:多醫院陪診小程序開發筆記(上)

概要設計 醫院陪診預約小程序&#xff1a;隨著移動互聯網的普及&#xff0c;越來越多的醫院陪診服務開始向線上轉型, 傳統的預約方式往往效率低下&#xff0c;用戶需耗費大量時間進行電話預約或現場排隊&#xff0c;陪診服務預約小程序集多種服務于一體&#xff0c;可以提高服…

定時任務:springboot集成xxl-job-core(二)

定時任務實現方式&#xff1a; 存在的問題&#xff1a; xxl-job的原理&#xff1a; 可以根據服務器的個數進行動態分片&#xff0c;每臺服務器分到的處理數據是不一樣的。 1. 多臺機器動態注冊 多臺機器同時配置了調度器xxl-job-admin之后&#xff0c;執行器那里會有多個注…

Unity使用Lua框架和C#框架開發游戲的區別

在Unity中使用Lua框架和C#框架開發游戲有顯著的區別&#xff0c;主要體現在性能、開發效率、熱更新能力、維護成本等方面。 1. 語言類型與設計目標 維度LuaC#類型動態類型、解釋型腳本語言靜態類型、編譯型面向對象語言設計初衷輕量級嵌入、配置和擴展宿主程序通用開發&#…

高精度文檔解析利器:Mistral OCR 全面解析與技術應用

目錄 &#x1f680; 高精度文檔解析利器&#xff1a;Mistral OCR 全面解析與技術應用 一、什么是 Mistral OCR&#xff1f; 二、Mistral OCR 的核心特點 ? 1. 支持復雜文檔結構解析 ? 2. 高識別精度 ? 3. 與 AI 系統深度集成 ? 4. 可擴展性與容錯能力 三、技術原理…

騰訊云開發者社區文章內容提取免費API接口教程

接口簡介&#xff1a; 提取指定騰訊云開發者社區文章內容。本接口僅做內容提取&#xff0c;未經作者授權請勿轉載。 請求地址&#xff1a; https://cn.apihz.cn/api/caiji/tencent.php 請求方式&#xff1a; POST或GET。 請求參數&#xff1a; 【名稱】【參數】【必填】【說…