国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

劍指 Offer 12. 矩陣中的路徑 / LeetCode 79. 單詞搜索(深度優(yōu)先搜索)

這篇具有很好參考價值的文章主要介紹了劍指 Offer 12. 矩陣中的路徑 / LeetCode 79. 單詞搜索(深度優(yōu)先搜索)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目:

鏈接:劍指 Offer 12. 矩陣中的路徑;LeetCode 79. 單詞搜索
難度:中等

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

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

例如,在下面的 3×4 的矩陣中包含單詞 “ABCCED”(單詞中的字母已標出)。
劍指 Offer 12. 矩陣中的路徑 / LeetCode 79. 單詞搜索(深度優(yōu)先搜索)

示例 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 僅由大小寫英文字母組成

深度優(yōu)先搜索:

簡單的深搜。從單詞的首字符開始在網(wǎng)格上逐字符逐方向的深搜,dfs 函數(shù)傳遞的參數(shù)是當前網(wǎng)格中搜索的位置和當前單詞中搜索的字符位置,單詞全部匹配完成或者深搜所有路徑都已搜索過即為完成。有一個visited數(shù)組記錄訪問過的位置、避免字符重復使用。
詳細請看代碼注釋。

代碼:

class Solution {
public:
    string Word;  // 查找的單詞
    int len;  // 單詞長度
    vector<vector<char>> Board;  // 網(wǎng)格
    int m, n;  // m * n 的網(wǎng)格
    vector<vector<bool>> visited;  // 單元格是否已被訪問
    bool dfs(int i, int j, int k) {  // i,j 為當前網(wǎng)格位置,k為當前查找的word字符位置
        if(i < 0 || i >= m || j < 0 || j >= n) return false;  // 邊界判斷
        if(visited[i][j]) return false;  // 字符不可重復使用
        if(Board[i][j] == Word[k]) {  // 當前字符匹配成功
            visited[i][j] = true;
            if(k == len - 1) return true;  // 查找到單詞終點,返回成功
            else {
                if(dfs(i - 1, j, k + 1)) return true;  // 沒查找完成,繼續(xù)在當前位上下左右四個方向查找下一個字符
                if(dfs(i + 1, j, k + 1)) return true;
                if(dfs(i, j - 1, k + 1)) return true;
                if(dfs(i, j + 1, k + 1)) return true;
                visited[i][j] = false;  // 下一字符匹配失敗,釋放當前訪問位
            }
        }
        return false;  // 當前字符不匹配,或下一字符所有方向上都匹配失敗,返回失敗
    }
    bool exist(vector<vector<char>>& board, string word) {
        Board = board;
        m = board.size(), n = board[0].size();
        Word = word;
        len = word.size();
        visited.resize(m, vector<bool>(n, false));  // 訪問數(shù)組初始化
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                bool flag;
                if(board[i][j] == word[0]) flag = dfs(i, j, 0);  // 從單詞第一個字符開始搜索
                if(flag) return true;
            }
        }
        return false;
    }
};

時間復雜度:一個非常寬松的上界為O(M * N * 3L),其中M,N為網(wǎng)格的長度與寬度,L為字符串word的長度。在每次調用函數(shù)dfs時,除了第一次可以進入4個分支以外,其余時間我們最多會進入3個分支(因為每個位置只能使用一次,所以走過來的分支沒法走回去)。由于單詞長為L,故dfs(i, j, 0)的時間復雜度為O(3L),而我們要執(zhí)行O(M * N)次檢查。然而,由于剪枝的存在,我們在遇到不匹配或已訪問的字符時會提前退出,終止遞歸流程。因此,實際的時間復雜度會遠遠小于Θ(M * N * 3L)。

空間復雜度:O(M * N)。我們額外開辟了O(M * N)的visited數(shù)組,同時棧的深度最大為O(min(L, M * N))。文章來源地址http://www.zghlxwxcb.cn/news/detail-432378.html

到了這里,關于劍指 Offer 12. 矩陣中的路徑 / LeetCode 79. 單詞搜索(深度優(yōu)先搜索)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 劍指Offer12.矩陣中的路徑 C++

    劍指Offer12.矩陣中的路徑 C++

    給定一個 m x n 二維字符網(wǎng)格 board 和一個字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使用。

    2024年02月14日
    瀏覽(20)
  • 劍指 Offer 12. 矩陣中的路徑(回溯 DFS)

    劍指 Offer 12. 矩陣中的路徑(回溯 DFS)

    給定一個 m x n 二維字符網(wǎng)格 board 和一個字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使用。

    2024年02月12日
    瀏覽(18)
  • 用 Go 劍指 Offer 12. 矩陣中的路徑

    用 Go 劍指 Offer 12. 矩陣中的路徑

    給定一個?m x n 二維字符網(wǎng)格?board 和一個字符串單詞?word 。如果?word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使

    2023年04月10日
    瀏覽(15)
  • 劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)

    劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)

    作者:翟天保Steven 版權聲明:著作權歸作者所有,商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處 題目描述: 請設計一個函數(shù),用來判斷在一個n乘m的矩陣中是否存在一條包含某長度為len的字符串所有字符的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以

    2024年02月11日
    瀏覽(22)
  • 用 Go 劍指 Offer 12. 矩陣中的路徑 (DFS + 回溯)

    用 Go 劍指 Offer 12. 矩陣中的路徑 (DFS + 回溯)

    給定一個?m x n 二維字符網(wǎng)格?board 和一個字符串單詞?word 。如果?word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使

    2023年04月10日
    瀏覽(18)
  • 劍指offer12 矩陣中的路徑 13 機器人的運動范圍 34.二叉樹中和為某一值得路徑

    劍指offer12 矩陣中的路徑 13 機器人的運動范圍 34.二叉樹中和為某一值得路徑

    //寫的有點問題,暫時想不到怎么改,先放著,通過用例71/83 卡住的是abcd 但是改了又有問題 無語 看了 答案 都寫不對 在類成員里面定義了row和col 就不要重復定義了 不然不知道為什么就開始發(fā)瘋 先貼出蠢貨寫出來的東西 審題也審不明白 機器人只能上下左右走 不能一行一行

    2024年02月15日
    瀏覽(25)
  • 替換空格&&反轉字符串中的單詞(LeetCode 劍指offer05 && 151)

    題目 劍指 Offer 05. 替換空格? 思路 遍歷,使用新的字符串來接原字符串,如為空格,則加入%20,否則加入原字符串。? 不過看了題解有另一種解法,由于空格轉化為%20,設計到原字符存儲空間的增加,因此先計算出需要增加的空間后。再使用雙指針,從后往前遍歷,這里畫的

    2024年02月16日
    瀏覽(19)
  • 劍指 Offer 34. 二叉樹中和為某一值的路徑 / LeetCode 113. 路徑總和 II(深度優(yōu)先搜索)

    劍指 Offer 34. 二叉樹中和為某一值的路徑 / LeetCode 113. 路徑總和 II(深度優(yōu)先搜索)

    鏈接:劍指 Offer 34. 二叉樹中和為某一值的路徑;LeetCode 113. 路徑總和 II 難度:中等 給你二叉樹的根節(jié)點 root 和一個整數(shù)目標和 targetSum ,找出所有 從根節(jié)點到葉子節(jié)點 路徑總和等于給定目標和的路徑。 葉子節(jié)點 是指沒有子節(jié)點的節(jié)點。 示例 1: 輸入:root = [5,4,8,11,null,1

    2024年02月03日
    瀏覽(25)
  • 【LeetCode】79.單詞搜索

    【LeetCode】79.單詞搜索

    給定一個? m x n ?二維字符網(wǎng)格? board ?和一個字符串單詞? word ?。如果? word ?存在于網(wǎng)格中,返回? true ?;否則,返回? false ?。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不

    2024年02月15日
    瀏覽(15)
  • 【LeetCode-中等題】79. 單詞搜索

    【LeetCode-中等題】79. 單詞搜索

    需要一個標記數(shù)組 來標志格子字符是否被使用過了 先找到word 的第一個字符在表格中的位置,再開始遞歸 遞歸的結束條件是如果word遞歸到了最后一個字符了,說明能在矩陣中找到單詞 剪枝條件 就是如果已經(jīng)找到單詞了 res = true 了 后面就不需要遞歸了,還有如果下標越界、

    2024年02月09日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包