题目考察的知识点是:
深度优先搜索和哈希算法。
题目解答方法的文字分析:
本题首先对数组进行遍历,判断二维数组中是否存在该元素,如果存在则加入到新的集合中,这个判断的逻辑则是一层套一层,然后用if去具体判断是否符合条件,最后得到需要的结果。
本题解析所用的编程语言:
java语言。
完整且正确的编程代码:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param board char字符型二维数组
* @param words string字符串一维数组
* @return string字符串一维数组
*/
public String[] findWords (char[][] board, String[] words) {
// write code here
List<String> result = new ArrayList<>();
for (String word : words) {
if (exist(board, word)) {
result.add(word);
}
}
return result.toArray(new String[0]);
}
private boolean exist(char[][] board, String word) {
int rows = board.length;
int cols = board[0].length;
boolean[][] visited = new boolean[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (dfs(board, word, i, j, 0, visited)) {
return true;
}
}
}
return false;
}
private boolean dfs(char[][] board, String word, int row, int col, int index,
boolean[][] visited) {
if (index == word.length()) {
return true;
}
if (row < 0 || row >= board.length || col < 0 || col >= board[0].length ||
visited[row][col] ||
board[row][col] != word.charAt(index)) {
return false;
}
visited[row][col] = true;
int[][] directions = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
for (int[] dir : directions) {
int newRow = row + dir[0];
int newCol = col + dir[1];
if (dfs(board, word, newRow, newCol, index + 1, visited)) {
return true;
}
}
visited[row][col] = false;
return false;
}
}

京公网安备 11010502036488号