題目:
我的思路:使用回溯,重要是剪枝,這點可以讓程式不用花太多時間做無用功。
我的解答:
class
solution }}
for (int i = 0; i < position.size(); i++)
used = new
int[board.length][board[0].length];
}used[x][y] = 0;//已被使用}}
return finals;
}private
static
boolean move(int used, char board, int x, int y,string word,int
index)
if(word.length()==index)
//1是左,2是下,3是→,4是上
for(int i=1;i<=4;i++)else
if(y-1>=0)
used[x][y-1] = 1;
if(move(used,board,x,y-1,word,index+1))
used[x][y-1] = 0;
}else
}break;
case
2: if(x+1>=board.length)else
if(x+1
if(used[x+1][y]==1)
if(word.charat(index)==board[x+1][y])
used[x+1][y] = 0;
}else
}break;
case
3: if(y+1>=board[0].length)else
used[x][y+1] = 1;
if(move(used,board,x,y+1,word,index+1))
used[x][y+1] = 0;
}}break;
case
4: if(x-1
<0)else
used[x-1][y] = 1;
if(move(used,board,x-1,y,word,index+1));
used[x-1][y] = 0;
}}break;}}
return
false;}}
這種型別的題目,我一眼看到就用了回溯法,可能剪枝不夠好吧,或者也許有更好的解法,導致解這一題花了952ms,挺長時間的。如果有更好的解法,還請大神不嗇教誨。 LeetCode212 單詞搜尋 II
題目描述 給定乙個二維網格 board 和乙個字典中的單詞列表 words,找出所有同時在二維網格和字典 現的單詞。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母在乙個單詞中不允許被重複使用。示例 輸入 words oat...
LeetCode212 單詞搜尋 II
這題是leetcode79.單詞搜尋的高階版,第79題是在二維的char陣列裡搜尋單個單詞,這題需要在二維char陣列裡搜尋一組單詞。理論上只需要對遍歷單詞陣列,逐個套用79的dfs方法即可,不過這題題目要求了需要用trie樹做優化。所以,我們最開始可以把單詞列表裡的所有單詞都插入到乙個trie樹中...
212 單詞搜尋 II
給定乙個二維網格 board 和乙個字典中的單詞列表 words,找出所有同時在二維網格和字典 現的單詞。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母在乙個單詞中不允許被重複使用。示例 輸入 words oath pea...