精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇解讀組合總和III

開發 前端
找出所有相加之和為 n 的 k 個數的組合。組合中只允許含有 1 - 9 的正整數,并且每種組合中不存在重復的數字。

[[424324]]

組合總和III

力扣題目鏈接:https://leetcode-cn.com/problems/combination-sum-iii/

找出所有相加之和為 n 的 k 個數的組合。組合中只允許含有 1 - 9 的正整數,并且每種組合中不存在重復的數字。

說明:

  • 所有數字都是正整數。
  • 解集不能包含重復的組合。

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

示例 2: 輸入: k = 3, n = 9 輸出: [[1,2,6], [1,3,5], [2,3,4]]

思路

本題就是在[1,2,3,4,5,6,7,8,9]這個集合中找到和為n的k個數的組合。

相對于77. 組合,無非就是多了一個限制,本題是要找到和為n的k個數的組合,而整個集合已經是固定的了[1,...,9]。

想到這一點了,做過77. 組合之后,本題是簡單一些了。

本題k相當于了樹的深度,9(因為整個集合就是9個數)就是樹的寬度。

例如 k = 2,n = 4的話,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(個數) = 2, n(和) = 4的組合。

選取過程如圖:

組合總和III

圖中,可以看出,只有最后取到集合(1,3)和為4 符合條件。

回溯三部曲

確定遞歸函數參數

和77. 組合一樣,依然需要一維數組path來存放符合條件的結果,二維數組result來存放結果集。

這里我依然定義path 和 result為全局變量。

至于為什么取名為path?從上面樹形結構中,可以看出,結果其實就是一條根節點到葉子節點的路徑。

  1. vector<vector<int>> result; // 存放結果集 
  2. vector<int> path; // 符合條件的結果 

接下來還需要如下參數:

  • targetSum(int)目標和,也就是題目中的n。
  • k(int)就是題目中要求k個數的集合。
  • sum(int)為已經收集的元素的總和,也就是path里元素的總和。
  • startIndex(int)為下一層for循環搜索的起始位置。

所以代碼如下:

  1. vector<vector<int>> result; 
  2. vector<int> path; 
  3. void backtracking(int targetSum, int k, int sumint startIndex) 

其實這里sum這個參數也可以省略,每次targetSum減去選取的元素數值,然后判斷如果targetSum為0了,說明收集到符合條件的結果了,我這里為了直觀便于理解,還是加一個sum參數。

還要強調一下,回溯法中遞歸函數參數很難一次性確定下來,一般先寫邏輯,需要啥參數了,填什么參數。

  • 確定終止條件

什么時候終止呢?

在上面已經說了,k其實就已經限制樹的深度,因為就取k個元素,樹再往下深了沒有意義。

所以如果path.size() 和 k相等了,就終止。

如果此時path里收集到的元素和(sum) 和targetSum(就是題目描述的n)相同了,就用result收集當前的結果。

所以 ,終止代碼如下:

  1. if (path.size() == k) { 
  2.     if (sum == targetSum) result.push_back(path); 
  3.     return; // 如果path.size() == k 但sum != targetSum 直接返回 
  • 單層搜索過程

本題和77. 組合區別之一就是集合固定的就是9個數[1,...,9],所以for循環固定i<=9

如圖:

處理過程就是 path收集每次選取的元素,相當于樹型結構里的邊,sum來統計path里元素的總和。

代碼如下:

  1. for (int i = startIndex; i <= 9; i++) { 
  2.     sum += i; 
  3.     path.push_back(i); 
  4.     backtracking(targetSum, k, sum, i + 1); // 注意i+1調整startIndex 
  5.     sum -= i; // 回溯 
  6.     path.pop_back(); // 回溯 

別忘了處理過程 和 回溯過程是一一對應的,處理有加,回溯就要有減!

參照關于回溯算法,你該了解這些!中的模板,不難寫出如下C++代碼:

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; // 存放結果集 
  4.     vector<int> path; // 符合條件的結果 
  5.     // targetSum:目標和,也就是題目中的n。 
  6.     // k:題目中要求k個數的集合。 
  7.     // sum:已經收集的元素的總和,也就是path里元素的總和。 
  8.     // startIndex:下一層for循環搜索的起始位置。 
  9.     void backtracking(int targetSum, int k, int sumint startIndex) { 
  10.         if (path.size() == k) { 
  11.             if (sum == targetSum) result.push_back(path); 
  12.             return; // 如果path.size() == k 但sum != targetSum 直接返回 
  13.         } 
  14.         for (int i = startIndex; i <= 9; i++) { 
  15.             sum += i; // 處理 
  16.             path.push_back(i); // 處理 
  17.             backtracking(targetSum, k, sum, i + 1); // 注意i+1調整startIndex 
  18.             sum -= i; // 回溯 
  19.             path.pop_back(); // 回溯 
  20.         } 
  21.     } 
  22.  
  23. public
  24.     vector<vector<int>> combinationSum3(int k, int n) { 
  25.         result.clear(); // 可以不加 
  26.         path.clear();   // 可以不加 
  27.         backtracking(n, k, 0, 1); 
  28.         return result; 
  29.     } 
  30. }; 

剪枝

這道題目,剪枝操作其實是很容易想到了,想必大家看上面的樹形圖的時候已經想到了。

如圖:

已選元素總和如果已經大于n(圖中數值為4)了,那么往后遍歷就沒有意義了,直接剪掉。

那么剪枝的地方一定是在遞歸終止的地方剪,剪枝代碼如下:

  1. if (sum > targetSum) { // 剪枝操作 
  2.     return

和77.組合 一樣,for循環的范圍也可以剪枝,i <= 9 - (k - path.size()) + 1就可以了。

最后C++代碼如下:

  1. class Solution { 
  2. private: 
  3.     vector<vector<int>> result; // 存放結果集 
  4.     vector<int> path; // 符合條件的結果 
  5.     void backtracking(int targetSum, int k, int sumint startIndex) { 
  6.         if (sum > targetSum) { // 剪枝操作 
  7.             return; // 如果path.size() == k 但sum != targetSum 直接返回 
  8.         } 
  9.         if (path.size() == k) { 
  10.             if (sum == targetSum) result.push_back(path); 
  11.             return
  12.         } 
  13.         for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝 
  14.             sum += i; // 處理 
  15.             path.push_back(i); // 處理 
  16.             backtracking(targetSum, k, sum, i + 1); // 注意i+1調整startIndex 
  17.             sum -= i; // 回溯 
  18.             path.pop_back(); // 回溯 
  19.         } 
  20.     } 
  21.  
  22. public
  23.     vector<vector<int>> combinationSum3(int k, int n) { 
  24.         result.clear(); // 可以不加 
  25.         path.clear();   // 可以不加 
  26.         backtracking(n, k, 0, 1); 
  27.         return result; 
  28.     } 
  29. }; 

總結

開篇就介紹了本題與77.組合的區別,相對來說加了元素總和的限制,如果做完77.組合再做本題在合適不過。

分析完區別,依然把問題抽象為樹形結構,按照回溯三部曲進行講解,最后給出剪枝的優化。 

相信做完本題,大家對組合問題應該有初步了解了。

 

責任編輯:武曉燕 來源: 代碼隨想錄
相關推薦

2021-09-14 07:26:26

組合問題循環

2022-06-15 08:17:13

OA系統數據

2020-11-22 08:32:29

人工智能AI

2021-07-12 06:11:14

SkyWalking 儀表板UI篇

2015-08-13 11:25:51

大數據

2025-11-18 08:46:00

大模型強化學習Meta

2022-10-26 07:39:36

MVCC數據庫RR

2022-01-02 08:43:46

Python

2022-12-19 08:14:30

注解開發配置

2021-05-20 06:57:16

RabbitMQ開源消息

2023-04-20 08:00:00

ES搜索引擎MySQL

2022-02-07 11:01:23

ZooKeeper

2021-07-06 08:59:18

抽象工廠模式

2023-11-28 08:29:31

Rust內存布局

2023-01-03 08:31:54

Spring讀取器配置

2021-07-02 09:45:29

MySQL InnoDB數據

2021-06-16 08:28:25

unary 方法函數技術

2017-07-31 15:14:07

Glide項目縮放

2020-10-09 08:15:11

JsBridge

2022-08-23 08:00:59

磁盤性能網絡
點贊
收藏

51CTO技術棧公眾號

亚洲天堂2018av| 日本欧美色综合网站免费| 久久人人爽人人爽人人| 美腿丝袜亚洲图片| 在线视频国内自拍亚洲视频| 亚洲啪啪av| 亚洲精品喷潮一区二区三区| 久久国产88| 成人444kkkk在线观看| 国产免费一区二区三区最新6| 依依综合在线| 国产精品国产成人国产三级| 国产亚洲一区在线播放 | 一本色道久久加勒比精品| 亚洲欧洲日夜超级视频| 天堂成人在线观看| 久久精品国产第一区二区三区| 欧美乱大交xxxxx| 蜜桃传媒一区二区亚洲av| 国产电影一区二区| 日本久久一区二区| 欧美这里只有精品| 尤物视频在线免费观看| 99久久综合国产精品| 国产一区二区色| 日日夜夜操视频| 欧美天天视频| 日韩中文字幕欧美| 李宗瑞91在线正在播放| 国产伦精品一区二区三区在线播放 | 免费av一区二区三区| aaa一区二区| 欧美a级一区二区| 欧美影院久久久| 欧美人妻精品一区二区三区| 日韩极品一区| 尤物精品国产第一福利三区| 中文字幕一区三区久久女搜查官| 麻豆精品国产| 欧美精品第1页| 天天碰免费视频| 亚洲精品福利电影| 亚洲成av人在线观看| 日本久久久网站| 1stkiss在线漫画| 国产精品热久久久久夜色精品三区| 欧美日韩电影一区二区| 午夜福利理论片在线观看| 国产黑丝在线一区二区三区| 91亚洲午夜在线| 国产又大又黄又爽| 久久精品国产在热久久| 国产精品视频地址| 中文字幕777| 日本成人在线电影网| 奇米4444一区二区三区| 国产精品黄色大片| 在线综合亚洲| 欧美自拍视频在线观看| 精品人妻一区二区三区免费看| 亚洲国产片色| 57pao精品| 日本高清不卡码| 水蜜桃久久夜色精品一区的特点| 日本精品久久久久久久| 超碰在线免费97| 美日韩一区二区三区| 国产男人精品视频| 国产精品欧美亚洲| 国产福利一区二区三区在线视频| 亚洲综合在线中文字幕| www.av黄色| 成人免费av网站| 久久精品日韩精品| 国产一级在线| 1024成人网| 成人国产在线看| 丰满诱人av在线播放| 亚洲成av人影院在线观看网| 欧美三级一级片| av一区在线| 欧美精品123区| 久久无码专区国产精品s| 久久97精品| 亚洲四色影视在线观看| 中国美女黄色一级片| 女主播福利一区| 97婷婷涩涩精品一区| 人人爽人人爽人人片av| 久久成人羞羞网站| 国产精品嫩草在线观看| 狠狠v欧美ⅴ日韩v亚洲v大胸| 国产精品久久久久天堂| 国产曰肥老太婆无遮挡| 免费在线小视频| 欧美日韩大陆一区二区| 美女露出粉嫩尿囗让男人桶| 国产午夜一区| 色综合视频一区中文字幕| 九九九在线观看| 韩国成人精品a∨在线观看| 精品蜜桃一区二区三区| 日本黄色片在线观看| 亚洲国产精品一区二区尤物区| 精品免费国产一区二区| 日韩精品一区二区三区免费视频| 亚洲精品一区二区三区婷婷月| 亚洲不卡的av| 一本色道88久久加勒比精品| 成人福利网站在线观看| 亚洲av片在线观看| 亚洲免费在线播放| 欧美伦理片在线看| 精品久久97| 久久天天躁日日躁| 青娱乐在线免费视频| 成人性生交大片| 伊人久久大香线蕉av一区| 是的av在线| 欧美大片在线观看一区二区| 亚洲最大成人综合网| 激情五月***国产精品| 国产日韩欧美在线播放| 男人天堂综合| 五月激情综合色| 日本在线视频播放| 久久理论电影| 国产精品88a∨| 亚州男人的天堂| 亚洲一区二区不卡免费| 午夜激情影院在线观看| 四季av一区二区三区免费观看 | 久久久精品国产sm调教| 毛片一区二区三区| 日韩欧美精品一区二区三区经典| 欧产日产国产精品视频| 欧美成人aa大片| 男人av资源站| 麻豆国产精品视频| 色综合久久av| 亚洲第一会所001| 亚洲欧美制服丝袜| 久久久久久久久久久久久av| 成人91在线观看| 黄色激情在线视频| 一区二区亚洲视频| 欧美成人在线影院| av无码精品一区二区三区宅噜噜| 国产精品久久久久久户外露出| 老司机午夜av| 精品久久久中文字幕| 国产成人亚洲综合91| 青青九九免费视频在线| 狠狠躁夜夜躁人人爽超碰91| 朝桐光av一区二区三区| 国产精品美女久久久| 精品一区在线播放| 最新中文字幕在线播放| 亚洲欧美变态国产另类| 欧美黄色一级大片| 国产日韩v精品一区二区| 中文字幕第21页| 日韩在线欧美| 96sao精品视频在线观看| av电影免费在线观看| 日韩欧美一级二级三级久久久| 欧美激情精品久久| 成人激情av网| 黄色a级片免费| 日韩在线观看一区| 91沈先生播放一区二区| 国产盗摄在线视频网站| 国产丝袜一区二区三区免费视频| 极品国产91在线网站| 国产精品网站在线| 久久成年人网站| 欧美另类亚洲| 久久久精品国产一区二区三区| 久九九久频精品短视频| 日韩中文字幕在线观看| 亚洲av无码专区在线| 欧美日韩国产区| 快灬快灬一下爽蜜桃在线观看| 国内精品视频666| 欧洲精品一区二区三区久久| 最近国产精品视频| 国产精品视频在线观看| 污影院在线观看| 亚洲精品一区二区网址| 91麻豆成人精品国产免费网站| 亚洲日本青草视频在线怡红院 | 久久亚洲国产成人| 日本美女一级片| 欧美特级限制片免费在线观看| 国产精品 欧美激情| 972aa.com艺术欧美| 色片在线免费观看| 激情综合久久| 一本色道久久99精品综合| 丁香五月缴情综合网| 国产成人在线一区| 调教一区二区| 亚洲色在线视频| 99产精品成人啪免费网站| 欧美日韩国产一区二区三区| 萌白酱视频在线| 2024国产精品| 亚洲妇女无套内射精| 久久久久久色| 欧美性潮喷xxxxx免费视频看| 欧美精品一区二区三区中文字幕| caoporen国产精品| 国产精品一区二区免费福利视频| 午夜精品www| www视频在线免费观看| 国产一区二区三区在线看| 黑人精品一区二区| 5858s免费视频成人| 午夜精品一区二| 亚洲成av人片| 欧美极品视频在线观看| 国产精品久久久久影院老司| 中文字幕人妻一区二区| 国产一区二区不卡| 一区二区三区视频网| 西西人体一区二区| av在线免费观看国产| 999精品色在线播放| 日本电影一区二区三区| 欧美亚洲大陆| 国产伦精品一区二区三毛| 日韩欧美中文在线观看| 国产精品日韩欧美综合| 欧美精品日日操| 555www成人网| 日韩电影免费看| 97香蕉超级碰碰久久免费软件| 亚洲综合图区| 理论片在线不卡免费观看| 在线观看免费黄色| 国产一区二区三区网站| 久久久pmvav| 国产视频精品自拍| 亚洲欧美综合在线观看| 亚洲激情视频在线| 天天综合天天综合| 亚洲国产成人爱av在线播放| 视频二区在线观看| 日韩精品免费看| 欧美女v视频| 亚洲天堂av女优| 国产精品麻豆一区二区三区 | 在线视频精品| 国产69精品久久久久久久| 日韩亚洲国产精品| 精品国产免费av| 日日夜夜免费精品| 美女少妇一区二区| 久久超碰97中文字幕| 最新av免费在线观看| 国产一区二区三区综合| www.久久com| 成人av在线网站| 国产麻豆天美果冻无码视频 | 丝袜在线观看| 久久久噜久噜久久综合| 一区二区精品伦理...| 热久久这里只有精品| 久久久人成影片一区二区三区在哪下载| 国产精品福利网| av一级久久| 国产欧美日韩伦理| 国产精品一区二区av交换| 亚洲一区二区三区午夜| 欧美成人一品| 亚洲国产精品久久久久婷蜜芽| 日韩精品久久理论片| 一级黄色录像在线观看| 东方aⅴ免费观看久久av| 少妇光屁股影院| 中文字幕亚洲一区二区av在线| 欧美丰满艳妇bbwbbw| 精品久久久久久久久久国产| 亚洲性猛交富婆| 欧美xxx久久| 毛片免费在线观看| 久久av红桃一区二区小说| 超碰成人av| 国产精品丝袜久久久久久不卡| 日本一区二区三区电影免费观看| 久久精品日产第一区二区三区 | 色综合影院在线| 大桥未久在线播放| 国产精品视频久久久| www.国产精品一区| 色爱区成人综合网| 午夜久久一区| 久久精品香蕉视频| 国产精品香蕉一区二区三区| 亚洲精品视频大全| 亚洲欧洲色图综合| 欧美一二三区视频| 欧美日韩mp4| 深夜福利视频一区| 美女啪啪无遮挡免费久久网站| 国模私拍一区二区国模曼安| 国产日韩欧美视频| 九九热爱视频精品视频| 精品人妻大屁股白浆无码| 日韩在线卡一卡二| 天堂www中文在线资源| 成人免费小视频| 精品国产午夜福利| 亚洲成成品网站| 国产日产一区二区| 国产成人精品网站| 精品久久ai电影| 黄网站色视频免费观看| 蜜桃视频在线一区| 波多野结衣福利| 亚洲国产成人va在线观看天堂| 一级黄色片视频| 亚洲欧美三级在线| 国产精品论坛| 不卡一卡2卡3卡4卡精品在| 久久一区二区三区电影| 老司机午夜av| wwwwww.欧美系列| 日本少妇久久久| 欧美不卡在线视频| 成人免费网站在线观看视频| 国产精品久久久久久久久久久久久| 欧美美女在线直播| 2019日韩中文字幕mv| 成人深夜视频在线观看| 国产乱国产乱老熟300| 欧美夫妻性生活| 日本中文在线观看| 国产欧美日韩最新| 99成人超碰| 999久久久精品视频| 1区2区3区精品视频| 一炮成瘾1v1高h| 日韩有码在线电影| 人人玩人人添人人澡欧美| 亚洲一区二区三区精品视频 | 国产精品直播网红| 成人激情视频| www.99r| 国产精品二区一区二区aⅴ污介绍| 亚洲av人无码激艳猛片服务器| 亚洲日韩欧美视频| 主播大秀视频在线观看一区二区| 日本精品一区二区三区不卡无字幕| 日韩av在线播放中文字幕| 欧美 日韩 国产 成人 在线观看| 色欧美88888久久久久久影院| 精彩国产在线| 国产精品免费网站| 婷婷综合伊人| 蜜桃视频无码区在线观看| 亚洲在线观看免费| 天天摸天天干天天操| 欧美有码在线观看视频| 超碰成人久久| 亚洲一区二区中文字幕在线观看| 亚洲精品国产一区二区三区四区在线| www.色婷婷.com| 午夜精品久久久99热福利| 丝袜久久网站| 亚洲少妇久久久| 亚洲欧美日韩国产综合在线| 亚洲av永久无码国产精品久久| 97视频在线观看播放| 欧美男gay| 天堂av手机在线| 亚洲成a人片综合在线| 免费毛片在线| 成人写真福利网| 亚洲高清电影| 夜夜春很很躁夜夜躁| 制服视频三区第一页精品| 成人免费高清观看| 欧美资源一区| 国产精品一区二区在线看| 日韩精品一区二区三区国语自制| 亚洲色图第一页| 国产日韩欧美中文在线| 久久综合九色综合88i| 国产欧美一区二区精品性| 国产三级视频在线播放| 2020久久国产精品| 88国产精品视频一区二区三区| av网站有哪些| 欧美精品xxxxbbbb| 免费在线小视频| 国产一二三四五| 国产亚洲成av人在线观看导航| 国产激情视频在线播放| 国产精品www|