每日5題Day8 - LeetCode 36 - 40

每一步向前都是向自己的夢想更近一步,堅持不懈,勇往直前!

第一題:36. 有效的數獨 - 力扣(LeetCode)

題目要求我們進行判斷,我們不需要自己填寫,所以要一個標志位,來看當前的值是否在行、列、格中出現過,每當這時候可以考慮使用位掩碼。

class Solution {public boolean isValidSudoku(char[][] board) {int[] line = new int[9];// 行int[] col = new int[9];// 列int[] cell = new int[9];// 9宮格for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {// 如果當前位置沒有數字,不用判斷。if (board[i][j] == '.')continue;//使用位掩碼來記錄數字int shift = 1 << (board[i][j] - '0');// 確定第幾位int k = (i / 3) * 3 + j / 3;// 9宮格的第幾個。// 如果對應的位置只要有一個被標記過,說明有沖突,直接返回false。//&與要求兩邊完全相同才大于0,下面這一步在判斷是否有相同數字出現過if ((col[i] & shift) > 0 || (line[j] & shift) > 0|| (cell[k] & shift) > 0)return false;// 把當前位置所在的行,列以及9宮格都標記為該數字已經存在。//或|只要某一位是1,則都是1,所以不管原來的col[i]等是否為0,//反正判斷的時候還是判斷col[i] & shift,所以下面這樣寫正確//建議自己手動模擬一下col[i] |= shift;line[j] |= shift;cell[k] |= shift;}}return true;}
}

第二題:37. 解數獨 - 力扣(LeetCode)

class Solution {//類似于dfs,要找到剛好唯一一組解,可能會涉及到已經放入的值回退的情況//直接使用空間換時間了,不回退直接判斷可不可以放,注意看兩層循環那個//if-for-return的邏輯:如果是'.' 那么能不能放數字,如果放了就繼續,否則return false//再注意看for循環里的邏輯,判斷這個數字放進去滿足數獨不,所以有一個isValidSudoku的判斷函數public void solveSudoku(char[][] board) {solveSudokuHelper(board);}private boolean solveSudokuHelper(char[][] board){for (int i = 0; i < 9; i++){ // 遍歷行for (int j = 0; j < 9; j++){ // 遍歷列if (board[i][j] != '.'){ // 跳過原始數字continue;}for (char k = '1'; k <= '9'; k++){ // (i, j) 這個位置放k是否合適if (isValidSudoku(i, j, k, board)){board[i][j] = k;if (solveSudokuHelper(board)){ // 如果找到合適一組立刻返回//注意這個地方的判斷,潛逃了兩層true的判斷return true;}board[i][j] = '.';}}return false;}}return true;}private boolean isValidSudoku(int row, int col, char val, char[][] board){//分別判斷行列格里是否存在相同元素for (int i = 0; i < 9; i++){if (board[row][i] == val){return false;}}for (int j = 0; j < 9; j++){if (board[j][col] == val){return false;}}int startRow = (row / 3) * 3;int startCol = (col / 3) * 3;for (int i = startRow; i < startRow + 3; i++){for (int j = startCol; j < startCol + 3; j++){if (board[i][j] == val){return false;}}}return true;}
}

第三題:38. 外觀數列 - 力扣(LeetCode)

public class Solution {// countAndSay 方法用于生成一個特定的字符串序列。// 序列的第 n 項是通過將第 n-1 項字符串中的連續相同字符進行計數和描述來生成的。public static String countAndSay(int n) {// 遞歸出口:如果 n 為 1,則返回字符串 "1",這是序列的第一項。if (n == 1) {return "1";}// 遞歸調用:如果 n 大于 1,則先遞歸調用 countAndSay(n - 1) 生成第 n-1 項,// 然后調用 transfer 方法將第 n-1 項轉換為第 n 項。return transfer(countAndSay(n - 1));}// transfer 方法接受一個字符串 s 作為輸入,并生成下一個字符串。// 它通過計數 s 中連續出現的相同字符,并將計數和字符拼接起來形成新的字符串。public static String transfer(String s) {StringBuilder sb = new StringBuilder(); // 使用 StringBuilder 來構建最終的字符串。int count = 1; // 初始化計數器,用于計數連續相同字符的數量。int length = s.length(); // 獲取輸入字符串的長度。int i;char temp = s.charAt(0); // 初始化臨時變量 temp 為字符串的第一個字符。// 遍歷輸入字符串 s。for (i = 1; i <= length; i++) {// 如果當前字符 temp 與 s.charAt(i) 相同,繼續計數。while (i < length && temp == s.charAt(i)) {count++; // 連續字符計數加 1。i++; // 移動到下一個字符。}// 如果 i < length,說明找到了不同的字符,更新 temp。if (i < length) {temp = s.charAt(i);}// 將當前字符的計數和字符本身添加到 StringBuilder 中。sb.append(count); // 添加計數。sb.append(s.charAt(i - 1)); // 添加字符本身。// 重置計數器,為下一個字符的計數做準備。count = 1; }// 返回構建好的字符串。return sb.toString();}
}

第四題:39. 組合總和 - 力扣(LeetCode)

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {//為了避免排列的重復情況出現,所以我們先進行排序Arrays.sort(candidates);traversal(0, target, candidates);return res;}private void traversal(int start, int target, int[] candidates){//把滿足條件的提出來if(target == 0){res.add(new ArrayList<>(path));return;}for(int i = start; i < candidates.length; i++){//對于每一個candidate進行遍歷,因為我們升序排列了,所以一旦選過了,//就不會再回去,就避免了排列情況的發生,實際上變為了組合if(target - candidates[i] >= 0){path.add(candidates[i]);traversal(i, target - candidates[i], candidates);//記得回溯path.remove(path.size() - 1);}else{//注意給一個邊界條件,如果不滿足了就退出break;}}}
}

?第五題:40. 組合總和 II - 力扣(LeetCode)


class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {Arrays.sort(candidates); // 對數組進行排序List<List<Integer>> res = new ArrayList<>();//因為每個候選人數字只能出現一次,所以我們與上一題不同的地方是要多加入一個標記數組backtrack(candidates, target, 0, new ArrayList<>(), res, new boolean[candidates.length]);return res;}private void backtrack(int[] candidates, int target, int start, List<Integer> path, List<List<Integer>> res, boolean[] used) {if (target == 0) {res.add(new ArrayList<>(path)); // 找到一種組合return;}for (int i = start; i < candidates.length; i++) {// 本質來說,這題有重復元素的排列導致的結果重復的問題,必須去重// 跳過重復的元素,注意這種去重的方式(避免上一行提到的情況)if (i > start && candidates[i] == candidates[i - 1]) {continue;}// 如果當前元素大于剩余目標,直接返回//注意邊界條件if (candidates[i] > target) {break;}// 使用當前元素if (!used[i]) {used[i] = true; // 標記為已使用path.add(candidates[i]); // 添加到路徑backtrack(candidates, target - candidates[i], i + 1, path, res, used); // 遞歸調用path.remove(path.size() - 1); // 回溯,移除當前元素used[i] = false; // 重置為未使用}}}
}

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

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

相關文章

Rust:對 CUDA 的支持

主要歸功于Rust CUDA項目&#xff0c;該項目旨在將Rust語言推向高性能GPU計算的前沿。以下是關于Rust對CUDA支持的詳細解釋&#xff1a; Rust CUDA項目&#xff1a;這是一個開源項目&#xff0c;允許開發者在Rust中直接編譯到高度優化的PTX代碼&#xff0c;這是NVIDIA GPU上運…

Go源碼--sync庫(1)sync.Once和

簡介 這篇主要介紹 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顧名思義 只執行一次 廢話不說 我們看源碼 英文介紹直接略過了 感興趣的建議讀一讀 獲益匪淺 其結構體如下 Once 是一個嚴格只執行一次的object type Once struct {// 建議看下源碼的注解&#xf…

首個“軟件供應鏈安全”國家標準正式發布!ToB企業震蕩,影響90%開發者

?近日&#xff0c;由開源網安深度參與編制的GB/T 43698-2024《網絡安全技術 軟件供應鏈安全要求》和GB/T 43848-2024《網絡安全技術 軟件產品開源代碼安全評價方法》兩項國家標準正式發布。 GB/T 43698-2024《網絡安全技術 軟件供應鏈安全要求》&#xff0c;是國內首個面向軟件…

Linux .eh_frame section以及libunwind

文章目錄 前言一、LSB二、The .eh_frame section2.1 簡介2.2 The Common Information Entry Format2.1.1 Augmentation String Format 2.3 The Frame Description Entry Format 三、The .eh_frame_hdr section四、libunwind五、基于Frame Pointer和基于unwind 形式的棧回溯比較…

雙向鏈表C++,C#,Java版,這些程序大多已經過測試,一直在用。

先C版吧&#xff0c;我最先用的是C#,后來是Java&#xff0c;后來改用C版的&#xff0c;因為現在一直在用C&#xff0c;單鏈 表一直沒寫上去&#xff0c;因為我很少用&#xff0c;用的是雙鏈表。 執行代碼例子1&#xff1a; int main() { _DList<_string> s…

9.STL中list的常見操作(圖文并茂)

目錄 1.list的介紹及使用 1.1.list的構造 1.2 list iterator的使用 1.3. list capacity 1.4.list modifiers 1.5.list的迭代器失效 1.list的介紹及使用 list介紹 &#xff0c;可以通過以下圖直觀的感受到 vector 和 list 的區別 Vector 插入代價高&#xff0c;但便于排…

力扣HOT100 - 72. 編輯距離

解題思路&#xff1a; 動態規劃 class Solution {public int minDistance(String word1, String word2) {int n1 word1.length();int n2 word2.length();int[][] dp new int[n1 1][n2 1];for (int j 1; j < n2; j) dp[0][j] dp[0][j - 1] 1;for (int i 1; i < …

Android Studio 使用MQTT協議開發應用時怎樣關閉MQTT連接

Android Studio 使用MQTT協議開發應用時怎樣關閉MQTT連接 Android Studio 使用MQTT協議開發應用時關閉MQTT連接 在使用mqtt開發的時候&#xff0c;有時候需要通過 返回 按鈕關閉界面或者Activity時&#xff0c;關閉當前頁面使用的mqtt連接&#xff0c;這里有兩種方式徹底銷毀…

《藝術大觀》知網藝術刊:可加急, 出刊上網快

《藝術大觀》 《藝術大觀》征文通知 《藝術大觀》期刊誠邀學者、藝術家和文化工作者積極投稿&#xff0c;共同探索藝術領域的前沿問題&#xff0c;促進學術交流和藝術創作的發展。我們歡迎各類藝術形式的研究與評論&#xff0c;包括但不限于繪畫、雕塑、音樂、舞蹈、戲劇、電…

共享IP和獨享IP之間的區別了解一下

在網絡環境中&#xff0c;代理服務器作為一種常見的工具&#xff0c;用于保護用戶隱私和拓寬網絡訪問范圍。在選擇代理服務器時&#xff0c;用戶經常會遇到共享IP和獨享IP兩種選擇。那么&#xff0c;這兩種代理方式有何區別呢&#xff1f;今天就為大家詳細解讀這個問題。 兩者…

【數據結構】排序詳解(希爾排序,快速排序,堆排序,插入排序,選擇排序,冒泡排序)

目錄 0. 前情提醒&#xff1a; 1. 插入排序 1.1 基本思想&#xff1a; 1.2 直接插入排序 實現步驟&#xff1a; 動圖演示&#xff1a; 特性總結&#xff1a; 代碼實現&#xff1a; 1.3 希爾排序&#xff08;縮小增量排序&#xff09; 基本思想&#xff1a; 步驟演示&…

AI大模型如何賦能智能座艙

AI 大模型如何賦能智能座艙 從上海車展上&#xff0c;我們看到由于智能座艙配置性價比較高&#xff0c;已經成為車企的核心競爭點之一&#xff0c;隨著座艙硬件規模化裝車&#xff0c;蔚小理、嵐圖、極狐等新勢力開始注重座艙多模態交互&#xff0c;通過集成語音/手勢/觸控打造…

Leetcode—2769. 找出最大的可達成數字【簡單】

2024每日刷題&#xff08;139&#xff09; Leetcode—2769. 找出最大的可達成數字 實現代碼 class Solution { public:int theMaximumAchievableX(int num, int t) {return num t * 2;} };運行結果 之后我會持續更新&#xff0c;如果喜歡我的文章&#xff0c;請記得一鍵三連…

【實戰】SpringBoot整合Websocket、Redis實現Websocket集群負載均衡

文章目錄 前言技術積累什么是Websocket什么是Redis發布訂閱Redis發布訂閱與消息隊列的區別 實戰演示SpringBoot整合WebsoketWebsoket集群負載均衡 實戰測試IDEA啟動兩臺服務端配置nginx負載均衡瀏覽器訪問模擬對話 前言 相信很多同學都用過websocket來實現服務端主動向客戶端推…

【知識蒸餾】deeplabv3 logit-based 知識蒸餾實戰,對剪枝的模型進行蒸餾訓練

本文將對【模型剪枝】基于DepGraph(依賴圖)完成復雜模型的一鍵剪枝 文章中剪枝的模型進行蒸餾訓練 一、邏輯蒸餾步驟 加載教師模型定義蒸餾loss計算蒸餾loss正常訓練 二、代碼 1、加載教師模型 教師模型使用未進行剪枝&#xff0c;并且已經訓練好的原始模型。 teacher_mod…

利用Python去除PDF水印

摘要 本文介紹了如何使用 Python 中的 PyMuPDF 和 OpenCV 庫來從 PDF 文件中移除水印&#xff0c;并將每個頁面保存為圖像文件的方法。我們將深入探討代碼背后的工作原理&#xff0c;并提供一個簡單的使用示例。 導言 簡介&#xff1a;水印在許多 PDF 文件中都很常見&#x…

全國數據庫管理系統設計賽-人大金倉內核實訓安排正式發布

作為數據庫領域國家隊&#xff0c;人大金倉積極響應國家戰略&#xff0c;通過賽題設計、內核技術支撐及賽前培訓等多方面&#xff0c;大力支持全國大學生計算機系統能力大賽-數據庫管理系統設計大賽成功舉辦。目前第二屆全國大賽正在火熱報名中&#xff0c;各種獎項等你來拿&am…

《web應用設計》第八次作業

我的小組長是姚若希&#xff0c;我們組課程設計的題目是&#xff1a;學生管理系統 &#xff0c;我認領的功能模塊是&#xff1a;課程管理 2.查詢并分頁

Html5 + Css3筆記詳細匯總大全

Html5 + Css3知識點Gitee地址 html5css3知識點: 尚硅谷—HTML5+CSS3知識點 介紹 屬性 屬性:在標簽中(開始標簽或自結束標簽)還可以設置屬性 屬性是一個名值對(x=y) 屬性用來設置標簽中的內容如何顯示 屬性和標簽名或其它屬性應該使用空格隔開 屬性名不能瞎寫,應該根據文…

只需三步,即可配置HTTPS跳轉

HTTPS&#xff08;全稱&#xff1a;Hyper Text Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;是以安全為目標的HTTP通道&#xff0c;簡單講是HTTP的安全版。通過SSL/TLS協議對數據進行加密&#xff0c;保證了數據傳輸的安全&#xff0c;防止數據被截獲、…