日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2024/7/23 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。