每日leetcode 單詞搜尋 單詞搜尋II

2021-09-23 10:47:52 字數 1929 閱讀 6102

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

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

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

}

bool search

(vectorchar

>>

& board,string &word,

int i,

int j,

int k,vector>

&flag)

};

給定乙個二維網格 board 和乙個字典中的單詞列表 words,找出所有同時在二維網格和字典**現的單詞。

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

示例:輸入:

words = [「oath」,「pea」,「eat」,「rain」] and board =

[[『o』,『a』,『a』,『n』],

[『e』,『t』,『a』,『e』],

[『i』,『h』,『k』,『r』],

[『i』,『f』,『l』,『v』]

]輸出: [「eat」,「oath」]

說明:你可以假設所有輸入都由小寫字母 a-z 組成。

你需要優化回溯演算法以通過更大資料量的測試。你能否早點停止回溯?

如果當前單詞不存在於所有單詞的字首中,則可以立即停止回溯。什麼樣的資料結構可以有效地執行這樣的操作?雜湊表是否可行?為什麼? 字首樹如何?如果你想學習如何實現乙個基本的字首樹,請先檢視這個問題: 實現trie(字首樹)。

class trie

void

insert

(trie *root,

const string word)

cur=cur->next[w-

'a'];}

cur->is_str=true;

cur->strword=word;}}

;class solution

;public:

vector

findwords

(vectorchar

>>

& board, vector

& words)

for(

int i=

0;ireturn res;

}void

dfs(vectorchar

>>

& board, trie *root,

int i,

int j,vector>

&visit)

//不是的話

dfs(board,root,i+

1,j,visit)

;dfs

(board,root,i-

1,j,visit)

;dfs

(board,root,i,j+

1,visit)

;dfs

(board,root,i,j-

1,visit);}

visit[i]

[j]=false;}}

};

Leetcode 單詞搜尋

以矩陣上每乙個點為起始點,開始每一輪的尋找 在尋找過程中,採用回溯演算法,選中了乙個點後就把它寫成0,在它的上下左右試探失敗之後,將這個點的值寫回。結束條件是長度滿足。遞迴返回的條件是當前為位置不該是這個字母。深刻的教訓 傳引用!引用!引用!include class solution return...

LeetCode 單詞搜尋

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

每日刷題 單詞搜尋

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