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

(搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】

這篇具有很好參考價(jià)值的文章主要介紹了(搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?劍指 Offer 12. 矩陣中的路徑

難度:中等

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

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

例如,在下面的 3×4 的矩陣中包含單詞 "ABCCED"(單詞中的字母已標(biāo)出)。
(搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】,LeetCode,矩陣,leetcode,線性代數(shù)

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

注意:本題 79. 單詞搜索 相同。

??思路:回溯法

使用回溯法(backtracking)進(jìn)行求解,它是一種暴力搜索方法,通過(guò)搜索所有可能的結(jié)果來(lái)求解問(wèn)題。

回溯法在一次搜索結(jié)束時(shí)需要進(jìn)行回溯(回退),將這一次搜索過(guò)程中設(shè)置的狀態(tài)進(jìn)行清除,從而開始一次新的搜索過(guò)程。

例如下圖示例中,從 f 開始,下一步有 4 種搜索可能,

  • 如果先搜索 b,需要將 b 標(biāo)記為已經(jīng)使用,防止重復(fù)使用。
  • 在這一次搜索結(jié)束之后,需要將 b 的已經(jīng)使用狀態(tài)清除,并搜索 c。

(搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】,LeetCode,矩陣,leetcode,線性代數(shù)

??代碼:(C++、Java)

C++

class Solution {
private:
    vector<pair<int, int>> dirs{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
    int m, n;
    bool check(vector<vector<char>>& board, vector<vector<int>>& visited, int i, int j, string& s, int k){
        if(board[i][j] != s[k]) return false;
        if(k == s.size() - 1) return true;
        visited[i][j] = 1;
        bool ans = false;
        for(auto dir : dirs){
            int cur_i = i + dir.first, cur_j = j + dir.second;
            if(cur_i >= 0 && cur_i < m && cur_j >= 0 && cur_j < n && visited[cur_i][cur_j] == 0) {
                if(check(board, visited, cur_i, cur_j, s, k + 1)){
                    ans = true;
                    break;
                }
            }
        }
        visited[i][j] = 0;
        return ans;
    }
public:
    bool exist(vector<vector<char>>& board, string word) {
       m = board.size(); 
       n = board[0].size(); 
       vector<vector<int>> visited(m, vector<int>(n));
       for(int i = 0; i < m; i++){
           for(int j = 0; j < n; j++){
               if(check(board, visited, i, j, word, 0))
                return true;
           }
       }
       return false;
    }
};

Java

class Solution {
    private int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
    private int m, n;
    private boolean check(char[][] board, int[][] visited, int i, int j, String s, int k){
        if(board[i][j] != s.charAt(k)) return false;
        if(k == s.length() - 1) return true;
        visited[i][j] = 1;
        boolean ans = false;
        for(int[] dir : dirs){
            int cur_i = i + dir[0], cur_j = j + dir[1];
            if(cur_i >= 0 && cur_i < m && cur_j >= 0 && cur_j < n && visited[cur_i][cur_j] == 0) {
                if(check(board, visited, cur_i, cur_j, s, k + 1)){
                    ans = true;
                    break;
                }
            }
        }
        visited[i][j] = 0;
        return ans;
    }
    public boolean exist(char[][] board, String word) {
        m = board.length; 
        n = board[0].length; 
        int[][] visited = new int[m][n];
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(check(board, visited, i, j, word, 0))
                return true;
            }
        }
        return false;
    }
}
?? 運(yùn)行結(jié)果:

(搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】,LeetCode,矩陣,leetcode,線性代數(shù)

?? 復(fù)雜度分析:
  • 時(shí)間復(fù)雜度:一個(gè)非常寬松的上界為 O ( m n ? 3 l ) O(mn*3^l) O(mn?3l),其中 m , n 為網(wǎng)格的長(zhǎng)度與寬度,l 為字符串 word 的長(zhǎng)度。在每次調(diào)用函數(shù) check 時(shí),除了第一次可以進(jìn)入 4 個(gè)分支以外,其余時(shí)間我們最多會(huì)進(jìn)入 3 個(gè)分支(因?yàn)槊總€(gè)位置只能使用一次,所以走過(guò)來(lái)的分支沒(méi)法走回去)。
  • 空間復(fù)雜度 O ( m n ) O(mn) O(mn)。我們額外開辟了 O ( m n ) O(mn) O(mn)visited 數(shù)組,同時(shí)棧的深度最大為 O ( m i n ? ( l , m n ) ) O(min?(l, mn)) O(min?(l,mn))。。

題目來(lái)源:力扣。

放棄一件事很容易,每天能堅(jiān)持一件事一定很酷,一起每日一題吧!
關(guān)注我LeetCode主頁(yè) / CSDN—力扣專欄,每日更新!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-655632.html

注: 如有不足,歡迎指正!

到了這里,關(guān)于(搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

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

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

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

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

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

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

    2023年04月10日
    瀏覽(15)
  • 劍指 Offer 12. 矩陣中的路徑(回溯 DFS)

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

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

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

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

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

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

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

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

    2024年02月11日
    瀏覽(22)
  • 劍指offer12 矩陣中的路徑 13 機(jī)器人的運(yùn)動(dòng)范圍 34.二叉樹中和為某一值得路徑

    劍指offer12 矩陣中的路徑 13 機(jī)器人的運(yùn)動(dòng)范圍 34.二叉樹中和為某一值得路徑

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

    2024年02月15日
    瀏覽(24)
  • Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    Leetcode-每日一題【劍指 Offer 29. 順時(shí)針打印矩陣】

    輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。 示例 1: 輸入: matrix = [[1,2,3],[4,5,6],[7,8,9]] 輸出: [1,2,3,6,9,8,7,4,5] 示例 2: 輸入: matrix =?[[1,2,3,4],[5,6,7,8],[9,10,11,12]] 輸出: [1,2,3,4,8,12,11,10,9,5,6,7] 限制: 0 = matrix.length = 100 0 = matrix[i].length?= 100 1.題目要求

    2024年02月13日
    瀏覽(28)
  • (搜索) 劍指 Offer 38. 字符串的排列 ——【Leetcode每日一題】

    (搜索) 劍指 Offer 38. 字符串的排列 ——【Leetcode每日一題】

    難度:中等 輸入一個(gè)字符串,打印出該字符串中字符的所有排列。 你可以以任意順序返回這個(gè)字符串?dāng)?shù)組,但里面 不能有重復(fù)元素 。 示例: 輸入:s = “abc” 輸出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”] 限制 : 1 = s 的長(zhǎng)度 = 8 ??思路:回溯 可以直接 暴力窮舉 ,但

    2024年02月12日
    瀏覽(29)
  • (搜索) 劍指 Offer 13. 機(jī)器人的運(yùn)動(dòng)范圍 ——【Leetcode每日一題】

    (搜索) 劍指 Offer 13. 機(jī)器人的運(yùn)動(dòng)范圍 ——【Leetcode每日一題】

    難度:中等 地上有一個(gè) m 行 n 列的方格,從坐標(biāo) [0,0] 到坐標(biāo) [m-1,n-1] 。一個(gè)機(jī)器人從坐標(biāo) [0, 0] 的格子開始移動(dòng),它每次可以向左、右、上、下移動(dòng)一格(不能移動(dòng)到方格外),也不能進(jìn)入行坐標(biāo)和列坐標(biāo)的數(shù)位之和大于 k 的格子。例如,當(dāng) k 為18時(shí),機(jī)器人能夠進(jìn)入方格

    2024年02月11日
    瀏覽(19)
  • Leetcode-每日一題【劍指 Offer 34. 二叉樹中和為某一值的路徑】

    Leetcode-每日一題【劍指 Offer 34. 二叉樹中和為某一值的路徑】

    給你二叉樹的根節(jié)點(diǎn)? root ?和一個(gè)整數(shù)目標(biāo)和? targetSum ?,找出所有? 從根節(jié)點(diǎn)到葉子節(jié)點(diǎn) ?路徑總和等于給定目標(biāo)和的路徑。 葉子節(jié)點(diǎn) ?是指沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)。 示例 1: 輸入: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 輸出: [[5,4,11,2],[5,8,4,5]] 示例 2: 輸入: ro

    2024年02月11日
    瀏覽(37)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包