【算法分析與設計】組合

???????📝個人主頁:五敷有你? ? ??

?🔥系列專欄:算法分析與設計

??穩中求進,曬太陽

題目

給定兩個整數?n?和?k,返回范圍?[1, n]?中所有可能的?k?個數的組合。

你可以按?任何順序?返回答案。

示例

示例 1:

輸入:n = 4, k = 2
輸出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]

示例 2:

輸入:n = 1, k = 1
輸出:[[1]]

思路(回溯+剪枝)

????????如果解決一個問題有多個步驟,每一個步驟有多種方法,題目又要我們找出所有的方法,可以使用回溯算法;
????????回溯算法是在一棵樹上的 深度優先遍歷(因為要找所有的解,所以需要遍歷);
????????組合問題,相對于排列問題而言,不計較一個組合內元素的順序性(即 [1, 2, 3] 與 [1, 3, 2] 認為是同一個組合),因此很多時候需要按某種順序展開搜索,這樣才能做到不重不漏。
????????回溯算法首先需要畫出遞歸樹,不同的樹決定了不同的代碼實現。下面給出了兩種畫樹的思路。

根據搜索起點畫出二叉樹

????????既然是樹形問題上的 深度優先遍歷,因此首先畫出樹形結構。例如輸入:n = 4, k = 2,我們可以發現如下遞歸結構:

????????如果組合里有 1 ,那么需要在 [2, 3, 4] 里再找 1 個數;
????????如果組合里有 2 ,那么需要在 [3, 4] 里再找 1數。注意:這里不能再考慮 1,因為包含 1 的組合,在第 1 種情況中已經包含。
????????依次類推(后面部分省略),以上描述體現的 遞歸 結構是:在以 n 結尾的候選數組里,選出若干個元素。畫出遞歸結構如下圖:

說明:

????????葉子結點的信息體現在從根結點到葉子結點的路徑上,因此需要一個表示路徑的變量 path,它是一個列表,特別地,path 是一個棧;
????????每一個結點遞歸地在做同樣的事情,區別在于搜索起點,因此需要一個變量 start ,表示在區間 [begin, n] 里選出若干個數的組合;
????????對于這一類問題,畫圖幫助分析是非常重要的解題方法。

代碼實現

class Solution {public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res = new ArrayList<>();if (k <= 0 || n < k) {return res;}// 從 1 開始是題目的設定Deque<Integer> path = new ArrayDeque<>();dfs(n, k, 1, path, res);return res;}public static void dfs(int n,int k,int begin,Deque<Integer> path,List<List<Integer>> res){//遞歸中止條件 path長度為kif(path.size()==k){res.add(new ArrayList<>(path));return;}//遍歷所有可能的起點for(int i=begin;i<=n;i++){//向路徑變量里添加一個數字path.addLast(i);dfs(n,k,i+1,path,res);path.removeLast();}}
}

運行結果

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

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

相關文章

25考研習題記錄

3月 湯家鳳《1800》 基礎篇 日期高等數學線性代數概率論3.1 P92-93 P212-214 3.4 P10-15 P10-19 極限題62題 P73-74 P170-172 行列式17題 考研競賽凱哥每日一題 張宇高數30講頁數3.4P74

【計算機學習】-- 電腦的組裝和外設

系列文章目錄 文章目錄 系列文章目錄前言一、電腦的組裝1.CPU2.主板3.顯卡4.硬盤5.內存6.散熱器7.電源8.機箱 二、電腦外設選用1.顯示器2.鼠標3.鍵盤4.音響 總結 前言 一、電腦的組裝 1.CPU 返回目錄 認識CPU CPU&#xff0c;即中央處理器&#xff0c;負責電腦資源的調度安…

計算機網絡-網絡安全(一)

1.網絡安全威脅和漏洞類型&#xff1a; 竊聽 假冒 重放 流量分析 破環完整 病毒 木馬 誹謗 非授權訪問 拒絕服務 漏洞&#xff1a;物理、軟件、不兼容、其他等。 2.網絡安全信息數據五大特征&#xff1a; 完整性&…

【.NET Core】深入理解IO - 讀取器和編寫器

【.NET Core】深入理解IO - 讀取器和編寫器 文章目錄 【.NET Core】深入理解IO - 讀取器和編寫器一、概述二、BinaryReader和BinaryWriter2.1 BinartReader類2.2 BinaryWriter類 三、StreamReader和StreamWriter3.1 StreamReader類3.1 StreamWriter類StreamWriter類構造函數Str…

Leetcode 3072. Distribute Elements Into Two Arrays II

Leetcode 3072. Distribute Elements Into Two Arrays II 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3072. Distribute Elements Into Two Arrays II 1. 解題思路 這一題不太明白為啥被劃分為了hard的題目&#xff0c;我們只需要按照題意構造一下arr1和arr2即可&#xff…

優化自動窗簾系統

要優化自動窗簾系統的代碼&#xff0c;我們可以考慮以下幾個方面&#xff1a; (1)模塊化設計&#xff1a;將不同的功能&#xff08;如讀取光強度、控制窗簾等&#xff09;分解成獨立的函數&#xff0c;以提高代碼的可讀性和可維護性。 (2)錯誤處理&#xff1a;增加錯誤處理機制…

【Vue】探究 Vue 2 與 Vue 3 生命周期:變化與延續

&#x1f497;&#x1f497;&#x1f497;歡迎來到我的博客&#xff0c;你將找到有關如何使用技術解決問題的文章&#xff0c;也會找到某個技術的學習路線。無論你是何種職業&#xff0c;我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章&#xff0c;也歡…

paper-ai :搜索真實文獻并生成引用真實文獻的AI論文

paper-ai &#xff1a;搜索真實文獻并生成引用真實文獻的AI論文。 項目簡介 使用真實文獻最快速完成論文的方法 利用人工智能撰寫論文 人工智能書寫功能&#xff1a;點擊 "AI 寫作 "進行正常對話互動。人工智能將根據您的輸入提供寫作建議或回答問題。 尋找文獻功能…

C/C++工程師面試題(STL篇)

STL 中有哪些常見的容器 STL 中容器分為順序容器、關聯式容器、容器適配器三種類型&#xff0c;三種類型容器特性分別如下&#xff1a; 1. 順序容器 容器并非排序的&#xff0c;元素的插入位置同元素的值無關&#xff0c;包含 vector、deque、list vector&#xff1a;動態數組…

DocxToDoc.java

DocxToDoc.java word高版本docx轉化word2003版本 package word;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagrap…

【Ubuntu 20.04 / 22.04 LTS】最新 esp-matter SDK 軟件編譯環境搭建步驟

倉庫鏈接&#xff1a;esp-matter SDK官方軟件說明&#xff1a;ESP Matter Programming Guide官方參考文檔&#xff1a;使用 Matter-SDK 快速搭建 Matter 環境 (Linux) 環境要求 Ubuntu 20.04 或 Ubuntu22.04網絡環境支持訪問 Gihub 在安裝 esp-matter SDK 軟件編譯環境之前&a…

三八女神節特別推薦:完美禮物俘獲她的芳心

三八女神節馬上就要到了&#xff0c;這是一個贊頌女性獨立、堅韌與美麗的時刻。在這個充滿溫馨與敬意的日子里&#xff0c;很多人想要為那些綻放光彩的女性們獻上一份特別的禮物。這不僅是一份物質上的饋贈&#xff0c;更是一份心靈上的交流&#xff0c;一次情感上的共鳴。 真…

面試經典150題——簡化路徑

"A goal is a dream with a deadline." - Napoleon Hill 1. 題目描述 2. 題目分析與解析 2.1 思路一 這個題目開始看起來并不太容易知道該怎么寫代碼&#xff0c;所以不知道什么思路那就先模擬人的行為&#xff0c;比如對于如下測試用例&#xff1a; 首先 /代表根…

手把手教會你使用Markdown【從入門到精通一篇就夠了】

手把手教會你使用Markdown【從入門到精通一篇就夠了】 前言一、Markdown是什么二、Markdown優點三、Markdown的基本語法3.1 標題3.2 字體3.3 換行3.4 引用3.5 鏈接3.6 圖片3.7 列表3.8 分割線3.9 刪除線3.10 下劃線3.11 代碼塊3.12 表格3.13 腳注3.14 特殊符號 四、Markdown的高…

UCSF DOCK 分子對接詳細案例(04)-基于RDKit描述符的分子從頭設計DOCK_D3N

歡迎瀏覽我的CSND博客&#xff01; Blockbuater_drug …點擊進入 文章目錄 前言一、 軟件及操作環境二、研究目的三、結構文件準備四、 DOCK/RDKit中 de novo design4.1 de novo design - refine_D3N4.2 對輸出重新評分 總結參考資料 前言 本文是UCSF DOCK的使用案例分享&…

lv20 QT事件5

1 事件模型 2 事件處理 virtual void keyPressEvent(QKeyEvent *event) virtual void keyReleaseEvent(QKeyEvent *event) virtual void mouseDoubleClickEvent(QMouseEvent *event) virtual void mouseMoveEvent(QMouseEvent *event) virtual void mousePressEvent(QMou…

【短時交通流量預測】基于Elman神經網絡

課題名稱&#xff1a;基于Elman神經網絡的短時交通流量預測 版本時間&#xff1a;2023-04-27 代碼獲取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主獲取 模型簡介&#xff1a; 城市交通路網中交通路段上某時刻的交通流量與本路段前幾個時段的交通流量有關&#…

自己拍攝的視頻能做成二維碼嗎?快速在線生碼該怎么操作?

自己拍攝的視頻能做成二維碼嗎&#xff1f;現在掃描二維碼用來播放視頻的使用場景越來越多&#xff0c;這種方式的流行在于能夠通過更低的成本獲取更好的效果&#xff0c;有效的提升用戶獲取視頻內容的體驗&#xff0c;通過消耗流量就可以播放視頻。 那么視頻制作二維碼一般會…

vue2 vue-router源碼解析

目錄 Vue Router 的基本結構和功能 源碼分析 一. 編寫install 方法 二 .生命變量存儲路由信息和當前路由 三 .初始化路由 把路由信息記錄在routeMap中 四.注冊router-link 和router-view 組件 Vue Router 的基本結構和功能 路由器實例&#xff08;Router 實例&#xff09;…

Vue.js 修飾符:精準控制組件行為

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》 &#x1f35a; 藍橋云課簽約作者、上架課程《Vue.js 和 E…