最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(79.詞語(yǔ)搜索)

 更新時(shí)間:2021年07月17日 14:50:25   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(79.詞語(yǔ)搜索),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 79. Word Search 詞語(yǔ)搜索

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[
["ABCE"],
["SFCS"],
["ADEE"]
]

word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.

這道題是典型的深度優(yōu)先遍歷 DFS 的應(yīng)用,原二維數(shù)組就像是一個(gè)迷宮,可以上下左右四個(gè)方向行走,我們以二維數(shù)組中每一個(gè)數(shù)都作為起點(diǎn)和給定字符串做匹配,我們還需要一個(gè)和原數(shù)組等大小的 visited 數(shù)組,是 bool 型的,用來(lái)記錄當(dāng)前位置是否已經(jīng)被訪問(wèn)過(guò),因?yàn)轭}目要求一個(gè) cell 只能被訪問(wèn)一次。如果二維數(shù)組 board 的當(dāng)前字符和目標(biāo)字符串 word 對(duì)應(yīng)的字符相等,則對(duì)其上下左右四個(gè)鄰字符分別調(diào)用 DFS 的遞歸函數(shù),只要有一個(gè)返回 true,那么就表示可以找到對(duì)應(yīng)的字符串,否則就不能找到,具體看代碼實(shí)現(xiàn)如下:

解法一:

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        if (board.empty() || board[0].empty()) return false;
        int m = board.size(), n = board[0].size();
        vector<vector<bool>> visited(m, vector<bool>(n));
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (search(board, word, 0, i, j, visited)) return true;
            }
        }
        return false;
    }
    bool search(vector<vector<char>>& board, string word, int idx, int i, int j, vector<vector<bool>>& visited) {
        if (idx == word.size()) return true;
        int m = board.size(), n = board[0].size();
        if (i < 0 || j < 0 || i >= m || j >= n || visited[i][j] || board[i][j] != word[idx]) return false;
        visited[i][j] = true;
        bool res = search(board, word, idx + 1, i - 1, j, visited) 
                 || search(board, word, idx + 1, i + 1, j, visited)
                 || search(board, word, idx + 1, i, j - 1, visited)
                 || search(board, word, idx + 1, i, j + 1, visited);
        visited[i][j] = false;
        return res;
    }
};

我們還可以不用 visited 數(shù)組,直接對(duì) board 數(shù)組進(jìn)行修改,將其遍歷過(guò)的位置改為井號(hào),記得遞歸調(diào)用完后需要恢復(fù)之前的狀態(tài),參見(jiàn)代碼如下:

解法二:

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        if (board.empty() || board[0].empty()) return false;
        int m = board.size(), n = board[0].size();
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (search(board, word, 0, i, j)) return true;
            }
        }
        return false;
    }
    bool search(vector<vector<char>>& board, string word, int idx, int i, int j) {
        if (idx == word.size()) return true;
        int m = board.size(), n = board[0].size();
        if (i < 0 || j < 0 || i >= m || j >= n || board[i][j] != word[idx]) return false;    
        char c = board[i][j];
        board[i][j] = '#';
        bool res = search(board, word, idx + 1, i - 1, j) 
                 || search(board, word, idx + 1, i + 1, j)
                 || search(board, word, idx + 1, i, j - 1)
                 || search(board, word, idx + 1, i, j + 1);
        board[i][j] = c;
        return res;
    }
};

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(79.詞語(yǔ)搜索)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)詞語(yǔ)搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言常用的編輯器你知道幾個(gè)

    C語(yǔ)言常用的編輯器你知道幾個(gè)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言常用的編輯器,中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 一篇文章帶你了解C語(yǔ)言指針進(jìn)階

    一篇文章帶你了解C語(yǔ)言指針進(jìn)階

    這篇文章主要介紹了C語(yǔ)言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價(jià)值。需要的朋友可以了解下
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)餐廳管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)餐廳管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)餐廳管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語(yǔ)言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對(duì)比

    C語(yǔ)言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對(duì)比

    這篇文章主要介紹了C語(yǔ)言中fgetgrent()函數(shù)和fgetpwent()函數(shù)的用法對(duì)比,分別用于讀取組格式函數(shù)和讀取密碼格式,需要的朋友可以參考下
    2015-08-08
  • 求32位機(jī)器上unsigned int的最大值及int的最大值的解決方法

    求32位機(jī)器上unsigned int的最大值及int的最大值的解決方法

    本篇文章是對(duì)求32位機(jī)器上unsigned int的最大值及int的最大值的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺析C++中的函數(shù)重載

    淺析C++中的函數(shù)重載

    這篇文章主要介紹了淺析C++中的函數(shù)重載,在C++中,可以為兩個(gè)或兩個(gè)以上的函數(shù)提供相同的函數(shù)名稱,只要參數(shù)類型不同,或者參數(shù)類型相同而參數(shù)個(gè)數(shù)不同,又或者參數(shù)類型參數(shù)個(gè)數(shù)相同,參數(shù)次序不同,稱為函數(shù)重載,需要的朋友可以參考下
    2023-08-08
  • 帶你了解C++的IO流

    帶你了解C++的IO流

    這篇文章主要介紹了C++ IO流的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • C++ namespace案例詳解

    C++ namespace案例詳解

    這篇文章主要介紹了C++ namespace案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • vscode分享代碼插件Polacode介紹

    vscode分享代碼插件Polacode介紹

    這篇文章主要介紹了vscode分享代碼插件Polacode的相關(guān)知識(shí),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • C語(yǔ)言中對(duì)數(shù)組賦值的三種形式

    C語(yǔ)言中對(duì)數(shù)組賦值的三種形式

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中對(duì)數(shù)組賦值的3種形式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

贵州省| 麻栗坡县| 大港区| 西畴县| 义乌市| 襄汾县| 高邮市| 布拖县| 大余县| 当阳市| 陈巴尔虎旗| 加查县| 汝城县| 临泽县| 萨迦县| 讷河市| 綦江县| 琼中| 阳春市| 凌源市| 尼勒克县| 横山县| 扬中市| 井冈山市| 临江市| 宁晋县| 肇源县| 恭城| 莆田市| 谷城县| 句容市| 兰坪| 封开县| 新绛县| 灵武市| 靖州| 天津市| 彰化市| 互助| 朝阳区| 武威市|