給定乙個二維網格board和乙個字典中的單詞列表words,找出所有同時在二維網格和字典**現的單詞。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母在乙個單詞中不允許被重複使用。
示例:
輸入:words=["oath","pea","eat","rain"]
andboard=[ ['o','a','a','n'],
['e','t','a','e'],
['i','h','k','r'],
['i','f','l','v']
]輸出:
["eat","oath"]
思路:1、要列印所有情況,因此進行dfs,單詞不允許重複,使用set儲存結果
2、將字典詞存到字典樹中
3、以二維陣列每乙個元素為單詞第乙個字母去遍歷字典樹,二維陣列中的延伸方向為上下左右,使用visit陣列儲存是否訪問過節點,使用陣列邊界判斷避免越界
4、在dfs過程中判斷單詞所在字典樹的節點end屬性是否為true,為true新增該節點,繼續dfs
5、dfs結束條件為樹節點為null,返回false;
class solution
public void addsubnode(character key,trienode value)
public boolean containsnode(character key)
public boolean isend()
public void setend(boolean end)
}public listfindwords(char board, string words) else
if((i>0&&!visit[i-1][j])&&!success)
if((i0&&!visit[i][j-1])&&!success)
if((jsb.delete(sb.length()-1,sb.length());
visit[i][j]=false;
}return false;
}}
單詞搜尋 II
給出乙個由小寫字母組成的矩陣和乙個字典。找出所有同時在字典和矩陣中出現的單詞。乙個單詞可以從矩陣中的任意位置開始,可以向左 右 上 下四個相鄰方向移動。樣例給出矩陣 doaf agai dcan和字典 返回 dog doafa gaidcandad d oafa gaid cancan doaf a...
每日leetcode 單詞搜尋 單詞搜尋II
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...
LintCode 單詞搜尋 II
單詞搜尋 ii 給出乙個由小寫字母組成的矩陣和乙個字典。找出所有同時在字典和矩陣中出現的單詞。乙個單詞可以從矩陣中的任意位置開始,可以向左 右 上 下四個相鄰方向移動。您在真實的面試中是否遇到過這個題?yes 樣例 給出矩陣 doaf agai dcan和字典 返回 dog doafa gaidca...