失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java dfs)

【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java dfs)

时间:2022-05-21 17:37:55

相关推荐

【LeetCode笔记】79. 单词搜索  剑指 Offer 12 矩阵中的路径(Java dfs)

文章目录

题目描述思路 & 代码更新版 2.0

题目描述

一眼dfs,走四个方向即可

思路 & 代码

class Solution {boolean[][] visited;boolean found;public boolean exist(char[][] board, String word) {char[] wordArr = word.toCharArray();int m = board.length;int n = board[0].length;visited = new boolean[m][n];// 找到入口,就进行查找for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(wordArr[0] == board[i][j]){visited[i][j] = true;found = find(board, wordArr, i, j, 1);if(found){return found;}visited[i][j] = false;}}}return false;}boolean find(char[][] board, char[] word, int x, int y, int index){if(index == word.length){return true;}// 找四个方向if(x + 1 < board.length && !visited[x + 1][y] && word[index] == board[x + 1][y]){visited[x + 1][y] = true;found = find(board, word, x + 1, y, index + 1);if(found){return found;}visited[x + 1][y] = false;}if(x - 1 >= 0 && !visited[x - 1][y] && word[index] == board[x - 1][y]){visited[x - 1][y] = true;found = find(board, word, x - 1, y, index + 1);if(found){return found;}visited[x - 1][y] = false;}if(y + 1 < board[0].length && !visited[x][y + 1] && word[index] == board[x][y + 1]){visited[x][y + 1] = true;found = find(board, word, x, y + 1, index + 1);if(found){return found;}visited[x][y + 1] = false;}if(y - 1 >= 0 && !visited[x][y - 1] && word[index] == board[x][y - 1]){visited[x][y - 1] = true;found = find(board, word, x, y - 1, index + 1);if(found){return found;}visited[x][y - 1] = false;}return found;}}

更新版 2.0

卧槽。。之前这么长的代码我怎么受得了T T

class Solution {boolean[][] visited;public boolean exist(char[][] board, String word) {char[] arr = word.toCharArray();visited = new boolean[board.length][board[0].length];for(int i = 0; i < board.length; i++) {for(int j = 0; j < board[0].length; j++) {if(dfs(board, arr, 0, i, j)) {return true;}}}return false;}// 符合当前字符,则进入下一层public boolean dfs(char[][] board, char[] arr, int index, int i, int j) {if(index == arr.length) {return true;}// 越界、不符、已访问if(i == board.length || j == board[0].length || i == -1 || j == -1 ||arr[index] != board[i][j] || visited[i][j]) {return false;}visited[i][j] = true;// 短路运算符||:剪枝boolean res = dfs(board, arr, index + 1, i + 1, j) || dfs(board, arr, index + 1, i - 1, j) ||dfs(board, arr, index + 1, i, j + 1) || dfs(board, arr, index + 1, i, j - 1);visited[i][j] = false;return res;}}

无注释纯净版

class Solution {boolean[][] visited;public boolean exist(char[][] board, String word) {char[] arr = word.toCharArray();visited = new boolean[board.length][board[0].length];for(int i = 0; i < board.length; i++) {for(int j = 0; j < board[0].length; j++) {if(dfs(board, arr, 0, i, j)) {return true;}}}return false;}public boolean dfs(char[][] board, char[] arr, int index, int i, int j) {if(index == arr.length) {return true;}if(i == board.length || j == board[0].length || i == -1 || j == -1 ||arr[index] != board[i][j] || visited[i][j]) {return false;}visited[i][j] = true;boolean res = dfs(board, arr, index + 1, i + 1, j) || dfs(board, arr, index + 1, i - 1, j) ||dfs(board, arr, index + 1, i, j + 1) || dfs(board, arr, index + 1, i, j - 1);visited[i][j] = false;return res;}}

如果觉得《【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java dfs)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。