题解 | #童谣寻找问题#
童谣寻找问题
https://www.nowcoder.com/practice/2537c84de0034d019b1679cf7bfcf776
知识点:dfs
思路:模拟迷宫,dfs寻找,我们需要添加额外的 visited
数组来记录访问过的元素,以避免重复访问。注意 Java 中的数组索引范围为 0 到 length-1
,因此循环条件需要进行相应的调整
编程语言:java
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param board char字符型二维数组 * @param word string字符串 * @return bool布尔型 */ private static final int[] dx = {-1, 0, 1, 0}; private static final int[] dy = {0, -1, 0, 1}; public boolean exist(char[][] board, String word) { int n = board.length; int m = board[0].length; boolean[][] visited = new boolean[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (dfs(board, word, visited, i, j, 0)) { return true; } } } return false; } private boolean dfs(char[][] board, String word, boolean[][] visited, int x, int y, int index) { if (index == word.length()) { return true; } if (x < 0 || x >= board.length || y < 0 || y >= board[0].length || visited[x][y] || board[x][y] != word.charAt(index)) { return false; } visited[x][y] = true; for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (dfs(board, word, visited, nx, ny, index + 1)) { return true; } } visited[x][y] = false; return false; } }