LeetCode 79 單詞搜尋

2021-09-13 18:38:12 字數 1256 閱讀 2650

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。

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

示例:board =

[[『a』,『b』,『c』,『e』],

[『s』,『f』,『c』,『s』],

[『a』,『d』,『e』,『e』]

]給定 word = 「abcced」, 返回 true.

給定 word = 「see」, 返回 true.

給定 word = 「abcb」, 返回 false.

這道題目的思想就是如果訪問到了那麼去下乙個,如果不匹配了, 那麼就反回上一層,找其他的方向。有沒有覺得這種思想很熟悉,我去走進乙個房間,發現有三個小門,隨便開啟乙個進去一看死路,那麼只能走回房間再去其他的門試試運氣。這就是回溯的思想。

class solution 

}return false;

}public boolean issolution(char board,int r, int c, boolean flag, string word, int start)

// 沒匹配到則把標記為改回去

flag[r][c] = false;

return false;

}}

還有乙個方法就是在建立陣列表示各個方向了,雖然還是用遞迴,這題不用遞迴做還真不知道怎麼做了。

class solution ;

int dw = ;

public boolean exist(char board, string word)

//判斷是否是最後乙個數,並且將index++

if(++index == word.length())return true;

//如果不是最後,則將此字元設定為已訪問,防止再次迴圈到

visited[row][col] = 1;

//從四個方向繼續訪問

for(int i = 0 ; i < 4 ;i++)

visited[row][col] = 0;

return false;

}}

第乙個時間複雜度為o(n^3)

第二個就是o(n^3),空間的複雜度都查不多

難點就是這次是個二維的陣列,所以找索引的時候就比較麻煩了。

遇到需要回頭重新做的題,一般都是用回溯的方法。不管有沒有其他的辦法,回溯肯定沒有錯。

[1]

leetcode 79 單詞搜尋

本題算是乙個組合類的題,也類似於深度優先搜尋演算法 設定乙個與字母構成的陣列大小相同的陣列,用來儲存某個位置的字母是否被訪問過,標註為1表示已被訪問過,避免重複 每次要看i,j位置上下左右的字母是否等於單詞第t個位置的字母 進行深度優先搜尋 bool find std vector board,st...

leetcode 79 單詞搜尋

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回t...

Leetcode 79 單詞搜尋

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...