无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

算法:矩陣中的路徑

2022-06-14 10:10 作者:做架構(gòu)師不做框架師  | 我要投稿


給定一個 m x n 二維字符網(wǎng)格 board 和一個字符串都是單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。

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

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


示例

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

  • 輸出:true

提示

  • 1 <= board.length <= 200

  • 1 <= board[i].length <= 200

  • board 和 word 僅由大小寫英文字母組成

解題思路

本問題是典型的矩陣搜索問題,可使用 深度優(yōu)先搜索(DFS)+ 剪枝 解決。

  • 深度優(yōu)先搜索: 可以理解為暴力法遍歷矩陣中所有字符串的可能性。DFS 通過遞歸,先朝一個方向搜到底,再回溯至上個節(jié)點,沿另一個方向搜索,以此類推。


  • 剪枝: 在搜索中,遇到 這條路不可能和目標字符串匹配成功 的情況(例如:此矩陣元素和目標字符不同、此元素已被訪問),則應立即返回,稱之為 可行性剪枝 。

示例說明

  • 第一次操作:當前值為 A ,我們遍歷他的上下左右四個方向的單詞,發(fā)現(xiàn)右側(cè)是 B ,滿足條件;

  • 第二次操作:從 B 開始遍歷四個方向,發(fā)現(xiàn)他的右側(cè)是 C ,滿足條件;

  • 第三次操作:從 C 開始遍歷四個方向,發(fā)現(xiàn)他的下側(cè)是 C ,滿足條件;

  • 第四次操作:從 C 開始遍歷四個方向,發(fā)現(xiàn)他的下側(cè)是 E ,滿足條件;

  • 第五次操作:從 E 開始遍歷四個方向,發(fā)現(xiàn)他的左側(cè)是 D ,滿足條件;

  • 第六次操作:發(fā)現(xiàn) D 滿足數(shù)組的 len(word) - 1 ,即字符串完全匹配,退出。

代碼如下:

復雜度分析

  • M, N 分別為矩陣行列大小, K 為字符串 word 長度。

  • 時間復雜度: 最差情況下,需要遍歷矩陣中長度為 KK 字符串的所有方案,時間復雜度為 O(3的K次方);矩陣中共有 MN 個起點,時間復雜度為 O(MN) 。

  • 方案數(shù)計算: 設(shè)字符串長度為 K ,搜索中每個字符有上、下、左、右四個方向可以選擇,舍棄回頭(上個字符)的方向,剩下 3 種選擇,因此方案數(shù)的復雜度為 O(3的K次方)。

  • 空間復雜度: 搜索過程中的遞歸深度不超過 K ,因此系統(tǒng)因函數(shù)調(diào)用累計使用的??臻g占用 O(K)(因為函數(shù)返回后,系統(tǒng)調(diào)用的??臻g會釋放)。最壞情況下 K = MN,遞歸深度為 MN ,此時系統(tǒng)棧使用 O(MN) 的額外空間。

END

本文內(nèi)容出處是力扣官網(wǎng),希望和大家一起刷算法,在后面的路上不變禿但是變強!

好兄弟可以點贊并關(guān)注我的公眾號“javaAnswer”,全部都是干貨。


算法:矩陣中的路徑的評論 (共 條)

分享到微博請遵守國家法律
东乌| 子洲县| 易门县| 达日县| 通山县| 阜新| 招远市| 哈密市| 长宁区| 五指山市| 尼勒克县| 崇明县| 萨迦县| 临西县| 六枝特区| 唐山市| 晋城| 梁山县| 凭祥市| 萨迦县| 涞水县| 滦南县| 阳曲县| 阿拉善右旗| 峨眉山市| 小金县| 元谋县| 昌宁县| 花莲市| 凤翔县| 康马县| 呼伦贝尔市| 托克托县| 定州市| 新民市| 元朗区| 营山县| 台前县| 高密市| 保定市| 游戏|