備戰秋招day7

很高興又堅持了7天。

算法(回溯)

77. 組合

class Solution {List<Integer> list = new LinkedList<>();List<List<Integer>> llist = new LinkedList<>();public List<List<Integer>> combine(int n, int k) {back(n,k,1);return llist;}public void back(int n,int k,int index){if(list.size() == k){llist.add(new LinkedList<>(list));return;}//剪枝優化:舉個例子,當n=k的時候,很明顯路只有一條,因此后面的都無需再遍歷//剪枝從什么角度入手去考慮呢?for(int i = index;i<=(n - (k-list.size()) + 1);i++){list.add(i);back(n,k,i+1);list.remove(list.size()-1);}}
}

216. 組合總和 III

class Solution {List<List<Integer>> res;List<Integer> list;public List<List<Integer>> combinationSum3(int k, int n) {res = new ArrayList<>();list = new ArrayList<>();back(k,n,1,0);return res;}public void back(int k,int n,int index,int sum){//剪枝if(sum > n){return;}//終止條件if(list.size() == k){if(sum == n){res.add(new ArrayList<>(list));}return;}//剪枝:如果當前和已經大于目標值,很顯然沒必要繼續遍歷for(int i = index;i<=9;i++){if(sum+i > n){continue;}sum+=i;list.add(i);back(k,n,i+1,sum);sum-=i;list.remove(list.size()-1);}}
}

17. 電話號碼的字母組合

class Solution {//設置全局列表存儲最后的結果List<String> list = new ArrayList<>();String[] num = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};public List<String> letterCombinations(String digits) {if(digits.equals("") || digits == null) return list;back(digits,0);return list;}StringBuilder tmp = new StringBuilder();public void back(String digits,int index){//終止條件if(index == digits.length()){list.add(tmp.toString());return;}//通過index找到當前按下的鍵String now = num[digits.charAt(index)-'0'];//遍歷可能的組合for(int i = 0;i<now.length();i++){tmp.append(now.charAt(i));back(digits,index+1);tmp.deleteCharAt(tmp.length()-1);}}
}

39. 組合總和

class Solution {List<List<Integer>> res;//大結果集List<Integer> list;//小結果集public List<List<Integer>> combinationSum(int[] candidates, int target) {res = new ArrayList<>();list = new ArrayList<>();//排序Arrays.sort(candidates);back(candidates,target,0,0);return res;}public void back(int[] candidates,int tar,int idx,int sum){if(sum == tar){res.add(new ArrayList<>(list));return;}for(int i = idx;i<candidates.length;i++){if(sum + candidates[i] > tar){continue;}sum+=candidates[i];list.add(candidates[i]);back(candidates,tar,i,sum);list.remove(list.size()-1);sum-=candidates[i];}}}

40. 組合總和 II

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> list = new ArrayList<>();//利用一個數組來記錄某數字是否被使用過boolean[] used;public List<List<Integer>> combinationSum2(int[] candidates, int target) {used = new boolean[candidates.length];Arrays.sort(candidates);Arrays.fill(used,false);back(candidates,target,0,0);return res;}public void back(int[] candidates, int target,int sum,int idx){if(sum == target){res.add(new LinkedList<>(list));return;}for(int i = idx;i<candidates.length;i++){//剪枝if(sum + candidates[i] > target) continue;//當前位和前一位相同的情況下,如果前一位已經為false,說明已經被選擇過了,跳過if(i>0 && candidates[i]==candidates[i-1] && used[i-1] == false){continue;}sum+=candidates[i];list.add(candidates[i]);used[i] = true;back(candidates,target,sum,i+1);used[i] = false;list.remove(list.size()-1);sum-=candidates[i];}}
}

131. 分割回文串

class Solution {List<List<String>> res = new ArrayList<>();List<String> list;public List<List<String>> partition(String s) {list = new ArrayList<>();back(s,0);return res;}public void back(String s,int idx){//如果idx到/超過了s的長度說明已經可以加入集合了if(idx >= s.length()){res.add(new ArrayList<>(list));return;}for(int i = idx;i<s.length();i++){if(isValid(idx,i,s)){//當前區間是回文串String tmp = s.substring(idx,i+1);list.add(tmp);back(s,i+1);list.remove(list.size()-1);}else{continue;}}}//判斷是否為回文串public boolean isValid(int start,int end,String s){while(start<end){if(s.charAt(start) != s.charAt(end)) return false;start++;end--;}return true;}
}

思考

剪枝從什么角度去入手呢?

剩余的數量是否足夠我去湊成結果集

剩余的數量還有沒有必要讓我繼續去跑下一輪來選擇?


補充知識點

今天無知識點的補充,明天出發去北京啦

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

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

相關文章

精品UI知識付費系統源碼網站EyouCMS模版源碼

這是一款知識付費平臺模板&#xff0c;后臺可上傳本地視頻&#xff0c;批量上傳視頻連接&#xff0c; 視頻后臺可設計權限觀看&#xff0c;免費試看時間時長&#xff0c;會員等級觀看&#xff0c;付費觀看等功能&#xff0c; 也帶軟件app權限下載&#xff0c;幫助知識教育和軟件…

制造企業的倉庫管理如何做好數據分析?

在競爭激烈的現代制造業環境中&#xff0c;倉庫管理成為許多生產制造企業面臨的一大挑戰。隨著產品種類的不斷增加和客戶需求的日一個型號&#xff0c;倉庫不僅要處理物料、半成品和成品&#xff0c;還要應對產品更新換代、不同項目客戶的特殊需求等復雜因素。面對這些挑戰&…

《Windows API每日一練》7.1 計時器基礎知識

計時器&#xff08;Timer&#xff09;是一種在編程中用于測量時間間隔的機制。它允許程序在指定的時間間隔內執行特定的操作或觸發事件。 本節必須掌握的知識點&#xff1a; 計時器 7.1.1 計時器 我們可以調用SetTimer函數為自己的Windows程序分配一個計時器。SetTimer包含一…

pygame在mobaxterm上無法顯示屏幕

在mobaxterm上的linux系統&#xff08;這里測試的是ubuntu系統&#xff09;上運行pygame時&#xff0c;在運行代碼 pygame.display.init()展示窗口時會顯示pygame.error: windows not available的錯誤。 這是因為linux下的窗口展示配置與windows不同&#xff0c;windows下按 …

C++實現簡化版Qt信號槽機制(2):增加內存安全保障

在上一篇文章中《C實現一個簡單的Qt信號槽機制》&#xff0c;我們基于前面的反射代碼實現了信號槽的功能。 但是上一篇的代碼中沒有對象生命周期管理的機制&#xff0c;如果在對象的生命周期結束后還存在未斷開的信號和槽連接&#xff0c;那么信號觸發時可能會嘗試訪問已經被析…

ValidateAntiForgeryToken、AntiForgeryToken 防止CSRF(跨網站請求偽造)

用途&#xff1a;防止CSRF&#xff08;跨網站請求偽造&#xff09;。 用法&#xff1a;在View->Form表單中: aspx&#xff1a;<%:Html.AntiForgeryToken()%> razor&#xff1a;Html.AntiForgeryToken() 在Controller->Action動作上&#xff1a;[ValidateAntiForge…

Java的IO體系

目錄 1、Java的IO體系2、IO的常用方法3、Java中為什么要分為字節流和字符流4、File和RandomAccessFile5、Java對象的序列化和反序列化6、緩沖流7、Java 的IO流中涉及哪些設計模式 1、Java的IO體系 IO 即為 input 輸入 和 output輸出 Java的IO體系主要分為字節流和字符流兩大類…

java對word文檔轉圖片,轉PDF

話不多說&#xff0c;直接入題 先引包 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-words</artifactId><version>23.1</version></dependency> word文檔轉圖片 import com.aspose.words.Document; impor…

防爆配電箱航空插頭正確安裝

防爆配電箱航空插頭的安裝確實有特殊要求&#xff0c;這些要求旨在確保配電箱在潛在危險環境中的安全運行。以下是一些關鍵的安裝要求&#xff1a; 安裝環境&#xff1a;防爆配電箱應安裝在危險區域之外的安全地點&#xff0c;遠離潛在的爆炸源和危險物質。安裝環境應保持干燥、…

springboot使用feign調用不依賴cloud

在使用spring boot調用第三方api中&#xff0c;常用的是okhttp、apache http client等&#xff0c;但是直接使用下來還是有點繁瑣&#xff0c;需要手動轉換實體。 在springcloud中有個openfeign調用&#xff0c;第一次體驗到調用接口還能這么絲滑。注解寫道接口上&#xff0c;…

17859劃分準則小結

17859《劃分準則》 發布時間&#xff1a;1999.9.13 實施時間&#xff1a;2001.1.1 計算機信息系統安全保護能力的五個等級&#xff1a; 第一級&#xff1a;用戶自主保護級 第二級…

數據結構簡介

在容器的基礎之上&#xff0c;java引入了數據結構的概念。數據結構可以簡單地理解成是一個以特定的布局方式來存儲數據的容器。但是我個人覺得這種理解方式不太合理&#xff0c;根據我們學的數據結構的內容&#xff0c;我更傾向于數據結構是數據在容器中的布局方式&#xff0c;…

rtthread stm32h743的使用(十一)spi設備使用

我們要在rtthread studio 開發環境中建立stm32h743xih6芯片的工程。我們使用一塊stm32h743及fpga的核心板完成相關實驗&#xff0c;核心板如圖&#xff1a; 1.建立新工程&#xff0c;選擇相應的芯片型號及debug引腳及調試器 2.編譯下載&#xff0c;可以看到串口打印正常 3.…

Python商務數據分析知識專欄(一)——Python編程基礎

Python商務數據分析知識專欄&#xff08;一&#xff09;——Python編程基礎 一、認識python二、編寫python程序三、認識python數據結構四、條件判斷及分支語句五、使用def定義函數六、認識面向對象七、讀取文件數據八、模塊和第三方庫專欄一&#xff08;Python基礎&#xff09;…

c++ 解決區間最大數和矩陣最大面積

給定一個實數序列&#xff0c;設計一個最有效的算法&#xff0c;找到一個總和數最大的區間等于某個事先給定的數字。 我們可以使用前綴和和哈希表來設計一個高效的算法。這個算法的時間復雜度是 O(n)&#xff0c;空間復雜度也是 O(n)。 #include <vector> #include <…

python查找支撐數 青少年編程電子學會python編程等級考試三級真題解析2022年3月

目錄 python查找支撐數 一、題目要求 1、編程實現 2、輸入輸出 二、算法分析 三、程序代碼 四、程序說明 五、運行結果 六、考點分析 七、 推薦資料 1、藍橋杯比賽 2、考級資料 3、其它資料 python查找支撐數 2022年3月 python編程等級考試級編程題 一、題目要求…

RabbitMQ 的經典問題

文章目錄 前言一、防止消息丟失1.1 ConfirmCallback/ReturnCallback1.2 持久化1.3 消費者確認消息 二、防止重復消費三、處理消息堆積四、有序消費消息五、實現延時隊列六、小結推薦閱讀 前言 當設計和運維消息隊列系統時&#xff0c;如 RabbitMQ&#xff0c;有幾個關鍵問題需…

第100+13步 ChatGPT學習:R實現決策樹分類

基于R 4.2.2版本演示 一、寫在前面 有不少大佬問做機器學習分類能不能用R語言&#xff0c;不想學Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi轉一下就得了唄。 加上最近也沒啥內容寫了&#xff0c;就幫各位搬運一下吧。 二、R代碼實現決策樹分類 &#xff08;…

【漏洞復現】宏景HCM人力資源信息管理系統——任意文件讀取漏洞

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 漏洞描述漏洞復現測試工具 漏洞描述 宏景HCM人力資源信息管理系統是一款全面覆蓋人力資源管理各模塊…

docker pull 鏡像的時候遇到Pulling fs layer問題

最近遇到一個很奇怪的問題,docker pull 鏡像的時候,總是出現Pulling fs layer問題,導致鏡像拉取不成功,以前是安裝好docker,正常拉取鏡像都是沒什么問題的,在這里記錄一下這個問題的解決方法,當然,可能并不通用。 1、進入阿里云容器服務 地址:https://cr.console.aliy…