日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

剑指offer:面试题12. 矩阵中的路径

發(fā)布時(shí)間:2023/11/27 生活经验 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指offer:面试题12. 矩阵中的路径 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:矩陣中的路徑

請(qǐng)?jiān)O(shè)計(jì)一個(gè)函數(shù),用來判斷在一個(gè)矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動(dòng)一格。如果一條路徑經(jīng)過了矩陣的某一格,那么該路徑不能再次進(jìn)入該格子。例如,在下面的3×4的矩陣中包含一條字符串“bfce”的路徑(路徑中的字母用加粗標(biāo)出)。

[["a","b","c","e"],
["s","f","c","s"],
["a","d","e","e"]]

但矩陣中不包含字符串“abfb”的路徑,因?yàn)樽址牡谝粋€(gè)字符b占據(jù)了矩陣中的第一行第二個(gè)格子之后,路徑不能再次進(jìn)入這個(gè)格子。

示例 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

提示:

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

解題:

思路:

首先對(duì)所整個(gè)矩陣遍歷,找到第一個(gè)字符,然后向上下左右查找下一個(gè)字符,由于每個(gè)字符都是相同的判斷方法(先判斷當(dāng)前字符是否相等,再向四周查找),因此采用遞歸函數(shù)。由于字符查找過后不能重復(fù)進(jìn)入,所以還要定義一個(gè)與字符矩陣大小相同的布爾值矩陣,進(jìn)入過的格子標(biāo)記為true。如果不滿足的情況下,需要進(jìn)行回溯,此時(shí),要將當(dāng)前位置的布爾值標(biāo)記回false。(所謂的回溯無非就是對(duì)使用過的字符進(jìn)行標(biāo)記和處理后的去標(biāo)記)

class Solution {
public:bool exist(vector<vector<char>>& board, string word) {for(int i = 0; i < board.size(); i++){for(int j = 0; j < board[i].size(); j++){if(dfs(board, word, 0, i, j)) return true;}}return false;}bool dfs(vector<vector<char> >& board, string& word, int n, int x, int y){if(board[x][y] != word[n]) return false;if(n == word.size()-1) return true;int dx[4]={1, -1, 0, 0}, dy[4] = {0, 0, 1, -1};char t = board[x][y];board[x][y] = '*';for(int i = 0; i < 4; i++){int u = dx[i] + x, v = dy[i] + y;if(u >= 0 && u < board.size() && v >= 0 && v < board[u].size()){if(dfs(board, word, n+1, u, v)) return true;} }board[x][y] = t;return false;}
};

深度優(yōu)先搜索算法(Depth First Search,簡稱DFS):一種用于遍歷或搜索樹或圖的算法。 沿著樹的深度遍歷樹的節(jié)點(diǎn),盡可能深的搜索樹的分支。當(dāng)節(jié)點(diǎn)v的所在邊都己被探尋過或者在搜尋時(shí)結(jié)點(diǎn)不滿足條件,搜索將回溯到發(fā)現(xiàn)節(jié)點(diǎn)v的那條邊的起始節(jié)點(diǎn)。整個(gè)進(jìn)程反復(fù)進(jìn)行直到所有節(jié)點(diǎn)都被訪問為止。屬于盲目搜索,最糟糕的情況算法時(shí)間復(fù)雜度為O(!n)。

總結(jié)

以上是生活随笔為你收集整理的剑指offer:面试题12. 矩阵中的路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。