Leetcode-每日一題【劍指 Offer 12. 矩陣中的路徑】

題目

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使用。

例如,在下面的 3×4 的矩陣中包含單詞 "ABCCED"(單詞中的字母已標出)。

示例 1:

輸入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
輸出:true

示例 2:

輸入:board = [["a","b"],["c","d"]], word = "abcd"
輸出:false

提示:

  • m == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • board word 僅由大小寫英文字母組成

解題思路

1.題目要求我們查詢所給的字符串是否在矩陣中,我們采用深度優先遍歷算法去求解此題。

2.舉個例子:word = ABCCED

按照右下左上的順序開始尋找,在這個時候我們需要設置一個用于記錄的二維數組visited,將訪問過的元素在visited數組中的相同的下標處置為true。

我們首先從左上角的A開始尋找,發現A與word中的第一個元素A是相等的,那么我們就將Visited[0][0]設置為true

?

?然后我們按照順序向右進行搜索,發現B與word中的第二個元素B是相等的

?

再次向右進行搜索

??

繼續向右,這個時候我們發現E與word中的第四個元素不同了,那么我們就要進行回溯,退回元素C。

然后再向下進行搜索

??

?S與word中的第五個元素不同,進行回溯

?

E與word中的第六個元素不同,進行回溯,當我們向下搜索時發現數組越界了,這時候我們就按搜索順序向左進行搜索。

我們成功找到了目標字符串。

?3.代碼思路,使用深度優先搜索(DFS)的方式,在board中尋找與word相匹配的字符。

如果當前字符與word的第一個字符不匹配,返回false。如果當前字符與word的最后一個字符匹配,說明已經找到了一個匹配的單詞,返回true。標記當前字符為已訪問,然后遞歸搜索當前字符的相鄰字符。如果相鄰字符中有一個能匹配word的下一個字符,返回true。如果相鄰字符都不能匹配word的下一個字符,返回false。回溯,將當前字符標記為未訪問。遍歷完board中的所有字符都沒有找到匹配的單詞,返回false。

代碼實現

class Solution {int n;int m;int len;boolean [][] visited;public boolean exist(char[][] board, String word) {this.n = board.length;this.m = board[0].length;this.len = word.length();visited = new boolean[n][m];for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(dsf(board, i, j, word, 0)){return true;}}}return false;}public boolean dsf(char[][] board, int i, int j, String word, int k){if(i<0 || i>=n || j<0 || j>=m || visited[i][j] || board[i][j] != word.charAt(k)){return false;}if(k == len - 1){return true;}visited[i][j] = true;boolean res = dsf(board, i, j + 1, word, k + 1)||dsf(board, i + 1, j, word, k + 1)||dsf(board, i, j - 1, word, k + 1)||dsf(board, i - 1, j, word, k + 1);visited[i][j] = false;return res;}
}

測試結果

?

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

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

相關文章

CUDA執行模型

一、CUDA執行模型概述 二、線程束執行 1. 線程束與線程塊 線程束是SM中基本的執行單元。 當一個線程塊的網格被啟動后&#xff0c;網格中的線程塊分布在SM中。 一旦線程塊被調度到一個SM中&#xff0c;線程塊中的線程會被進一步劃分成線程束。 一個線程束由32個連續的線程…

【Express.js】數據庫初始化

數據庫初始化 在軟件開發階段和測試階段&#xff0c;為了方便調試&#xff0c;我們通常會進行一系列的數據庫初始化操作&#xff0c;比如重置數據表&#xff0c;插入記錄等等&#xff0c;或者在部署階段進行數據初始化的操作 根據前面章節介紹過的 knex.js 和 sequelize.js&…

基于自適應曲線閾值和非局部稀疏正則化的壓縮感知圖像復原研究【自適應曲線閾值去除加性穩態白/有色高斯噪聲】(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

什么是媒體代發布?媒體代發布注意事項

傳媒如春雨&#xff0c;潤物細無聲&#xff0c;大家好&#xff0c;我是51媒體網胡老師。 媒體代發布是指將新聞稿或其他宣傳內容委托給專業的媒體代理機構或公司進行發布和推廣的活動。這些機構通常擁有豐富的媒體資源、人脈和經驗&#xff0c;能夠更好地將信息傳遞給目標受眾…

C語言 指針與內存之間的關系

一、內存與字節 一個內存單元一個字節一個地址 整型 int 類型中int類型的字節數是4 且一個字節表示八個bite位 一個二進制數位有著32個bite 所以又可以表示為&#xff1a;一個字節 8個比特位 32位數的二進制數位的八分之一 例如&#xff1a; int a 10&#xff1b; 該表達式…

項目實戰 — 消息隊列(9){編寫demo程序}

消息隊列服務器核心功能就是&#xff0c;提供了虛擬主機&#xff0c;交換機&#xff0c; 隊列&#xff0c;消息等概念的管理&#xff0c;實現三種典型的消息轉發方式&#xff0c;可以實現跨主機/服務器之間的生產者消費模型。 這里&#xff0c;就編寫一個demo&#xff0c;實現…

【實戰講解】數據血緣落地實施

?在復雜的社會分工協作體系中&#xff0c;我們需要明確個人定位&#xff0c;才能更好的發揮價值&#xff0c;數據也是一樣&#xff0c;于是&#xff0c;數據血緣應運而生。 今天這篇文章會全方位的講解數據血緣&#xff0c;并且給出具體的落地實施方案。 一、數據血緣是什么…

JAVA多線程和并發基礎面試問答(翻譯)

JAVA多線程和并發基礎面試問答(翻譯) java多線程面試問題 1. 進程和線程之間有什么不同&#xff1f; 一個進程是一個獨立(self contained)的運行環境&#xff0c;它可以被看作一個程序或者一個應用。而線程是在進程中執行的一個任務。Java運行環境是一個包含了不同的類和程序…

蘇州OV泛域名RSA加密算法https

RSA加密算法是一種非對稱加密算法&#xff0c;它被廣泛應用于信息安全領域。與對稱加密算法不同&#xff0c;RSA加密算法使用了兩個密鑰&#xff0c;一個公鑰和一個私鑰。公鑰可以公開&#xff0c;任何人都可以使用它加密信息&#xff0c;但只有私鑰的持有者才能解密信息。RSA加…

php如何對接偽原創api

在了解偽原創api的各種應用形態之后&#xff0c;我們繼續探討智能寫作背后的核心技術。需要說明的是&#xff0c;智能寫作和自然語言生成、自然語言理解、知識圖譜、多模算法等各類人工智能算法都有緊密的關聯&#xff0c;在百度的智能寫作實踐中&#xff0c;常根據實際需求將多…

全球勞動力革命,Papaya Global 打破薪資界限

員工需求和勞動力結構的進一步變化&#xff0c;只會增加對更加自動化和全面的全球薪資解決方案的需求。 遠程工作潮流與全球勞動力的蓬勃發展&#xff0c;使得企業在全球范圍內&#xff0c;尋找最優秀的人才成為可能。然而&#xff0c;隨之而來的復雜薪資管理挑戰&#xff0c;也…

優雅地處理RabbitMQ中的消息丟失

目錄 一、異常處理 二、消息重試機制 三、錯誤日志記錄 四、死信隊列 五、監控與告警 優雅地處理RabbitMQ中的消息丟失對于構建可靠的消息系統至關重要。下面將介紹一些優雅處理消息丟失的方案&#xff0c;包括異常處理、重試機制、錯誤日志記錄、死信隊列和監控告警等。…

BUUCTF題目Web部分wp(持續更新)

關于SQL注入的一些通用辦法 可以訪問哪些表 如有權限&#xff0c;查詢當前用戶可以訪問的所有表 --Oracle查詢當前用戶可訪問的所有表 select owner&#xff0c; table_name from all_tables order by table_name; --MySQL查詢用戶可訪問的所有數據庫和表 select table_sche…

爬蟲017_urllib庫_get請求的quote方法_urlencode方法_---python工作筆記036

按行來看get請求方式 比如這個地址 上面這個地址復制粘貼過來以后 可以看到周杰倫變成了一堆的Unicode編碼了 所以這個時候我們看,我們說https這里,用了UA反爬,所以這里 我們構建一個自定義的Request對象,里面要包含Us

電腦mfc140u.dll丟失的怎么辦呢?這個方法親測可以解決

修復mfc140u.dll是我最近遇到的一個技術問題&#xff0c;雖然在解決過程中遇到了一些困難&#xff0c;但最終的成功修復讓我對技術的力量有了更深的體會。 首先&#xff0c;我想談談遇到問題時的困惑。當我嘗試運行一個應用程序時&#xff0c;突然彈出一個錯誤提示&#xff0c;…

Docker Dirtypipe(CVE-2022-0847)漏洞復現與分析容器逃逸

安裝環境 ./metarget cnv install cve-2022-0847 --verbose 原理 同臟牛&#xff0c;通過寫只讀內存&#xff0c;對映射的內存做篡改 EXP docker run --rm -it -v $(pwd):/exp --cap-addCAP_DAC_READ_SEARCH ubuntu如果提示 Unknown capability to add: "CAP_CAP_DAC_RE…

第五十二天

HTML5 ●MathML 是數學標記語言&#xff0c;是一種基于XML&#xff08;標準通用標記語言的子集&#xff09;的標準&#xff0c;用來在互聯網上書寫數學符號和公式的置標語言。 ●拖放 拖放是一種常見的特性&#xff0c;即抓取對象以后拖到另一個位置。 在 HTML5 中&#xf…

YAMLException: java.nio.charset.MalformedInputException: Input length = 1

springboot項目啟動的時候提示這個錯誤&#xff1a;YAMLException: java.nio.charset.MalformedInputException: Input length 1 根據異常信息提示&#xff0c;是YAML文件有問題。 原因是yml配置文件的編碼有問題。 需要修改項目的編碼格式&#xff0c;一般統一為UTF-8。 或…

分別用python和go語言來實現的風靡一時的2048 游戲,包含完整代碼

目錄 1、Python實現2、Go實現 2048 游戲實現主要包括以下幾個步驟&#xff1a; 創建一個棋盤&#xff0c;通常使用二維列表表示。實現棋子的移動規則&#xff0c;左移、右移、上移、下移。判斷游戲是否結束&#xff0c;即棋盤是否已滿或者無空位可移動。實現游戲界面的顯示。 …

【Android】ViewBinding+DataBinding+MVVM新手快速上手

為什么寫這篇博客 網上大部分博客&#xff0c;代碼量都比較大&#xff0c;把實際的業務都代入進去了 這篇博客的目的&#xff0c;就是為了講解基本原理和使用思路&#xff0c;然后給出一個最簡單的Demo 這里不講解具體用法&#xff0c;那樣篇幅會太長&#xff0c;直接看Demo…