力扣面試150題--組合總和

Day 72

題目描述(終于理順回溯了)

在這里插入圖片描述

思路

這里還是基于模板來說明代碼思路


void backtracking(參數) {if (終止條件) {存放結果;return;}for (選擇 : 本層集合中的元素) {處理節點;backtracking(路徑, 選擇列表); // 遞歸撤銷處理; // 回溯}
}

對于主要函數的作用就是用來聲明結果集,臨時集以及調用函數的,不贅述了。
進入主要的函數代碼,
首先是終止條件,當我們獲取到的總和值大于等于target的時候就可以終止了(由于限制了元素值都是正整數),這里只有等于target才將其加入到結果集。
其次進入循環,這里回溯前后,有兩步要做,第一步添加元素到臨時集,第二步總和值增加。
最后回溯結束記得復原。
于是有了以下做法,但是這么做是有問題的。
出現問題的原因在于,我沒有控制循環的起始值就會導致以下重復的清空如 2 2 3 和3 2 2,那我們如何規避這種情況呢?見下一段代碼。

class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>>res = new ArrayList<List<Integer>>();List<Integer>te = new ArrayList<Integer>();back(te,res,0,target,candidates);return res;}public void back(List<Integer>te,List<List<Integer>>res,int sum,int target,int[]candidates){if(sum>=target){if(sum==target)res.add(new ArrayList<Integer>(te));return;}for(int i=0;i<candidates.length;i++){te.add(candidates[i]);sum+=candidates[i];back(te,res,sum,target,candidates);sum-=candidates[i];te.removeLast();}}
}

這里在上面代碼的基礎上進行修改,出現重復的原因在于,由于本題不限制元素使用次數,并且元素不重復,因此在我們首次進入遞歸循環一次時,就獲取了第一個元素所有組合總和的情況了。
同理我們聚焦到最高層遞歸的第二個循環,這里回溯還回到第一個元素,那就會出現重復的情況。
我們知道了問題的存在,如何解決了呢?
很簡單,使用一個start參數,在進行回溯時,只接著遍歷start以及start以后的元素即可。

class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>>res = new ArrayList<List<Integer>>();List<Integer>te = new ArrayList<Integer>();back(te,res,0,target,candidates,0);return res;}public void back(List<Integer>te,List<List<Integer>>res,int sum,int target,int[]candidates,int start){if(sum>=target){if(sum==target)res.add(new ArrayList<Integer>(te));return;}for(int i=start;i<candidates.length;i++){te.add(candidates[i]);sum+=candidates[i];back(te,res,sum,target,candidates,i);sum-=candidates[i];te.removeLast();}}
}

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

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

相關文章

多客戶端-服務器(select,poll)

多客戶端-服務器結構總結一、普通CS架構的局限性核心問題&#xff1a;單線程中accept&#xff08;阻塞等待連接&#xff09;與read&#xff08;阻塞讀取數據&#xff09;函數互相干擾&#xff0c;無法同時處理多客戶端。本質原因&#xff1a;阻塞型函數需獨立執行&#xff0c;若…

如何使用postman做接口測試?

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 常用的接口測試工具主要有以下幾種&#xff1a;Postman: 簡單方便的接口調試工具&#xff0c;便于分享和協作。具有接口調試&#xff0c;接口集管理&#xff0c…

新型網絡架構設計助力智慧醫療降本增效

隨著智慧醫療的快速發展,越來越多的醫院開始布局“互聯網+醫療”服務,通過數字化手段提升醫療服務效率。然而,如何構建一個既穩定可靠又具備靈活擴展能力的醫療網絡,成為醫院數字化轉型中的關鍵問題。本文以某智慧醫療項目為例,探討傳統網絡與SD-WAN結合的最佳實踐。 背景…

一文讀懂現代卷積神經網絡—使用塊的網絡(VGG)

目錄 什么是使用塊的網絡&#xff08;VGG&#xff09;&#xff1f; 一、VGG 的核心思想&#xff1a;用塊&#xff08;Block&#xff09;構建網絡 二、VGG 的網絡結構 三、VGG 的優勢 1. 結構簡潔統一 2. 強大的特征表達能力 3. 小卷積核的計算效率 4. 良好的遷移學習性…

Linux的相關學習

linux 1.文件權限怎么修改 chmod [權限模式] [文件或目錄]1、**數字模式&#xff08;八進制&#xff09;**&#xff1a; chmod 755 myfile.sh # 所有者&#xff1a;rwx (7)&#xff0c;組&#xff1a;r-x (5)&#xff0c;其他用戶&#xff1a;r-x (5) 7 rwx&#xff08;讀寫…

Kotlin集合接口

Kotlin 集合概述 Kotlin 集合提供了對數據進行各種操作的便捷方式。它們實現了接口&#xff0c;因此可以操作不同類型的數據。例如&#xff0c;你可以編寫一個函數&#xff0c;同時打印 Set 和 List 的所有元素。我們來看看這是如何實現的。Iterable 接口 我們已經知道&#xf…

Git 常用操作與注意事項全攻略

1. 基本配置 git config --global user.name "你的名字" git config --global user.email "你的郵箱" git config --list # 查看當前配置建議全局配置用戶名和郵箱&#xff0c;否則提交記錄可能不規范2.倉庫操作 初始化本地倉庫 git init只在新建項目時使…

STM32-第五節-TIM定時器-1(定時器中斷)

一、定時器原理&#xff1a;1.介紹&#xff1a;對指定輸入時鐘進行計數&#xff0c;并在計數值達到設定值時觸發中斷。分類&#xff1a;基本定時器&#xff0c;通用定時器&#xff0c;高級定時器頻率&#xff1a;72MHZ2.框圖&#xff1a; &#xff08;1&#xff09;基本定時器&…

【圖像處理基石】什么是色盲仿真技術?

色盲仿真概述 色盲仿真是一種將正常色彩圖像轉換為色盲患者感知效果的技術。人類常見的色盲類型包括&#xff1a; 紅色盲&#xff08;Protanopia&#xff09;&#xff1a;無法感知紅色綠色盲&#xff08;Deuteranopia&#xff09;&#xff1a;無法感知綠色藍黃色盲&#xff08;…

九、官方人格提示詞匯總(中-3)

“參謀代寫計劃”功能輸出欣賞&#xff0c;規則&#xff1a; 本部分統一使用 Gemini 2.5 Pro API。該 API 下的輸出質量基本達到我的要求&#xff0c;已具備實用價值。嚴格等級均為“權衡有度&#xff08;L3&#xff09;”&#xff0c;創造力等級均為“趨勢捕手&#xff08;L3…

華為MateBook D 16 SE版 2024款 12代酷睿版i5集顯(MCLF-XX,MCLF-16)原廠OEM預裝Win11系統

適用型號&#xff1a;MCLF-XX,MCLF-16鏈接&#xff1a;https://pan.baidu.com/s/1OkvUqZMdCSF98YtQfWAYXw?pwdq2gh 提取碼&#xff1a;q2gh 華為開箱狀態出廠Windows11系統自帶所有驅動、出廠主題壁紙、系統屬性聯機支持標志、系統屬性專屬LOGO標志、Office辦公軟件、華為電腦…

Python自動化:每日銷售數據可視化

這是手動執行sql分組查出的Linda奶茶店每日的銷售數據,那么能否圖形化展示方便對比近一個月每日的銷售趨勢呢。如果是做在網站里,前端可以集成echart或highchart生成柱狀圖或線狀圖。如果需要每天定時推送這些數據到郵箱或其他消息通知渠道,第一步肯定是需要先生成圖片到服務…

scrapy項目開發流程

1.創建項目&#xff1a;scrapy startproject mySpider2.生成一個爬蟲&#xff1a;scrapy genspider itcast itcast.cn3.提取數據&#xff1a;根據網站結構在spider中實現數據采集相關內容4.保存數據使用pipeline進行數據后續處理和保存1.創建項目items.py-->自己預計需要爬取…

堆排序以及其插入刪除

堆排序首先介紹一下堆排序屬于選擇排序的一種類型。其次就是他有點依賴于順序存儲樹判斷其孩子以及父節點的概念&#xff0c;接下來復習一下。堆分為大根堆和小根堆① 若滿?&#xff1a;L(i)≥L(2i)且L(i)≥L(2i1) &#xff08;1 ≤ i ≤n/2 &#xff09;—— ?根堆&#xff…

Spring Boot項目結構解析:構建高效、清晰的代碼框架

在當今的軟件開發領域&#xff0c;Spring Boot因其簡潔性和強大的功能而備受青睞。它不僅簡化了Spring框架的配置&#xff0c;還提供了一套高效的項目開發模式。本文將深入探討Spring Boot項目結構中的關鍵組件&#xff0c;包括PO、Query、VO、Config等&#xff0c;旨在幫助開發…

多客戶端 - 服務器結構-實操

實現2個客戶端之間互相聊天 要求&#xff1a; 1、服務器使用 select 模型實現接受多個客戶端連接&#xff0c;以及轉發消息 2、客戶端要求&#xff1a;使用 poll 模型解決 技能夠 read 讀取服務器發來的消息&#xff0c;又能夠scanf讀取鍵盤輸入的信息 3、客戶端服務器不允許開…

iOS高級開發工程師面試——Objective-C 語言特性

iOS高級開發工程師面試——Objective-C 語言特性 一、多態二、繼承三、代理(Delegate)1. 代理為什么用 weak 修飾呢?block和代理的區別?四、通知(NSNotificationCenter)五、KVC (Key-value Coding)六、屬性七、`@property` [?pr?p?ti]的本質是什么?ivar 、 setter …

MMpretrain 中的 LinearClsHead 結構與優化

LinearClsHead 結構與優化 一、LinearClsHead 核心結構 在 MMPretrain 中&#xff0c;LinearClsHead 是一個簡潔高效的分類頭&#xff0c;其核心結構如下&#xff1a; class LinearClsHead(BaseModule):def __init__(self,num_classes, # 類別數量in_channels, # 輸入…

Spring 學習筆記

1.Spring AOP 怎么實現的AOP 即面向切面編程&#xff0c;是通過代理實現的&#xff0c;主要分為靜態代理和動態代理&#xff0c;靜態代理就是在程序運行前就已經指定并聲明了代理類和增強邏輯&#xff0c;運行時就已經被編譯為字節碼文件了&#xff0c;而動態代理則是在運行過程…

【CVPR2024】計算機視覺|InceptionNeXt:速度與精度齊飛的CNN架構

論文地址&#xff1a;http://arxiv.org/pdf/2303.16900v3 代碼地址&#xff1a;https://github.com/sail-sg/inceptionnext 關注UP CV縫合怪&#xff0c;分享最計算機視覺新即插即用模塊&#xff0c;并提供配套的論文資料與代碼。 https://space.bilibili.com/473764881 摘要…