【附可运行代码】剑指 Offer 12. 矩阵中的路径
立志用最少的代碼做最高效的表達(dá)
給定一個(gè) m x n 二維字符網(wǎng)格 board 和一個(gè)字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。
單詞必須按照字母順序,通過(guò)相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個(gè)單元格內(nèi)的字母不允許被重復(fù)使用。
例如,在下面的 3×4 的矩陣中包含單詞 “ABCCED”(單詞中的字母已標(biāo)出)。
示例 1:
輸入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
輸出:true
示例 2:
輸入:board = [[“a”,“b”],[“c”,“d”]], word = “abcd”
輸出:false
提示:
1 <= board.length <= 200
1 <= board[i].length <= 200
board 和 word 僅由大小寫(xiě)英文字母組成
優(yōu)化過(guò)程
1、定義成員變量(全局變量),避免回溯方法用二維數(shù)組做參數(shù),占用大量?jī)?nèi)存。
2、靈活使用剪枝,具體見(jiàn)代碼。
可運(yùn)行代碼
// 靜態(tài)Solution public class 劍指Offer12_矩陣中的路徑 {public static class Solution {char[][] bo; // 數(shù)組boardchar[] wo; // 數(shù)組wordboolean[][] vis; // vis數(shù)組int next[][];int n, m;boolean flag = false;public boolean exist(char[][] board, String word) {// 特殊情況判斷if(board.length == 0) return false;bo = board;wo = word.toCharArray();n = bo.length; m = bo[0].length;vis = new boolean[n][m];next = new int[][]{{1,0}, {-1,0}, {0,-1},{0,1}};for(int i = 0; i < n; i++) {for(int j = 0; j < m; j++) {if(wo[0] == bo[i][j]) {vis[i][j] = true;dfs(i, j, 1);vis[i][j] = false;}// 每次搜索后都判斷是否已經(jīng)找到if(flag) return true;}}return false;}public void dfs(int x, int y, int k) {// 1、終止條件// k == len,終止// res 如果已經(jīng)找到,則直接return(剪枝)if(k == wo.length || flag) {flag = true; return;}for(int d = 0; d < 4; d++) {int xx = x + next[d][0], yy = y + next[d][1];// 越界 or 被訪問(wèn)過(guò) or 不匹配if(xx < 0 || yy < 0 || xx >= n || yy >= m || vis[xx][yy] || bo[xx][yy]!=wo[k]) continue;vis[xx][yy] = true;dfs(xx, yy, k+1);vis[xx][yy] = false;}}}public static void main(String[] args) {Solution solution = new Solution();char[][] board = {{'a','b','c','e'},{'s','f','c','s'},{'a','d','e','e'}};String word = "abcced";System.out.println(solution.exist(board, word));} } 超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的【附可运行代码】剑指 Offer 12. 矩阵中的路径的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【双百解法】剑指 Offer 11. 旋
- 下一篇: 【四重优化,速看】剑指 Offer 13