轻量级前端框架助力开发者提升项目效率与性能
822
2022-10-30
[LeetCode] Word Search
图形化表述:
代码:
public class liubobo_8_4 { /// 79. Word Search/// Source : 回溯法/// 时间复杂度: O(m*n*m*n)/// 空间复杂度: O(m*n) private int d[][] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};//辅助数组,用于上下左右位移 ,这在二维数组中常常使用,简称偏移量 private int m, n; private boolean[][] visited;//辅助数组,用于代表每个坐标是否被访问过 public boolean exist(char[][] board, String word) { if(board == null || word == null) throw new IllegalArgumentException("board or word can not be null!"); m = board.length; if(m == 0) throw new IllegalArgumentException("board can not be empty."); n = board[0].length; if(n == 0) throw new IllegalArgumentException("board can not be empty."); visited = new boolean[m][n]; for(int i = 0 ; i < m ; i ++) for(int j = 0 ; j < n ; j ++) if(searchWord(board, word, 0, i, j)) return true; return false; } private boolean inArea( int x , int y ){ //inArea是辅助函数,用于分析坐标是否有效,分析有没有越界 return x >= 0 && x < m && y >= 0 && y < n; } // 核心递归函数 // 从board[startx][starty]开始, 寻找word[index...word.size()) private boolean searchWord(char[][] board, String word, int index, int startx, int starty){ //assert(inArea(startx,starty)); if(index == word.length() - 1) {//终止条件 return board[startx][starty] == word.charAt(index); } if(board[startx][starty] == word.charAt(index)){ //找到了元素 visited[startx][starty] = true; // 从startx, starty出发,向四个方向寻 for(int i = 0 ; i < 4 ; i ++){ int newx = startx + d[i][0]; int newy = starty + d[i][1]; //inArea是辅助函数,用于分析坐标是否有效 if(inArea(newx, newy) && !visited[newx][newy] && searchWord(board, word, index + 1, newx, newy)) return true; } //寻找没找到,就放弃占用这个位置 visited[startx][starty] = false; } return false; } public static void main(String args[]){ char[][] b1 = { {'A','B','C','E'}, {'S','F','C','S'}, {'A','D','E','E'}}; String words[] = {"ABCCED", "SEE", "ABCB" }; for(int i = 0 ; i < words.length ; i ++) if((new liubobo_8_4()).exist(b1, words[i])) System.out.println("found " + words[i]); else System.out.println("can not found " + words[i]); // --- char[][] b2 = {{'A'}}; if((new liubobo_8_4()).exist(b2,"AB")) System.out.println("found AB"); else System.out.println("can not found AB"); }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~