解题思路
递归
提交代码:
class Solution {
public List<String> findWords(char[][] board, String[] words) {
List<String> res=new ArrayList<String>();
for(String word: words) {
if(checkWord(board,word))
res.add(word);
}
return res;
}
public boolean checkWord(char[][] board,String word) {
if(word.equals("")) return true;
if(board.length==0) return false;
int rows=board.length,cols=board[0].length;
boolean[][] flags=new boolean[rows][cols];
for(int i=0;i<rows;i++) {
for(int j=0;j<cols;j++) {
if(board[i][j]==word.charAt(0)) {
flags[i][j]=true;
if(checkRemain(board,flags,word.substring(1),i-1,j)||
checkRemain(board,flags,word.substring(1),i+1,j)||
checkRemain(board,flags,word.substring(1),i,j-1)||
checkRemain(board,flags,word.substring(1),i,j+1))
return true;
flags[i][j]=false;
}
}
}
return false;
}
public boolean checkRemain(char[][] board,boolean[][] flags,String word,int i,int j) {
if(word.equals("")) return true;
if(i<0||i>=board.length||j<0||j>=board[0].length||flags[i][j]) return false;
if(board[i][j]!=word.charAt(0)) return false;
flags[i][j]=true;
if(checkRemain(board,flags,word.substring(1),i-1,j)||
checkRemain(board,flags,word.substring(1),i+1,j)||
checkRemain(board,flags,word.substring(1),i,j-1)||
checkRemain(board,flags,word.substring(1),i,j+1))
return true;
flags[i][j]=false;
return false;
}
}
运行结果

本文介绍了一种使用递归算法在二维字符矩阵中查找给定单词的方法。通过遍历矩阵,利用递归检查每个可能的路径,以确定单词是否存在于矩阵中。此算法适用于解决单词搜索谜题等类似问题。
869

被折叠的 条评论
为什么被折叠?



