回溯问题 发表于 2020-06-12 | 分类于 面试整理 | 热度: 字数统计: 421 字 | 阅读时长 ≈ 2 分钟 回溯问题从网格中寻找单词 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778package com.data.stringDemo;/** * 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 * 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。 * 同一个单元格内的字母不允许被重复使用。 * * board = * [ * ['A','B','C','E'], * ['S','F','C','S'], * ['A','D','E','E'] * ] * * 给定 word = "ABCCED", 返回 true * 给定 word = "SEE", 返回 true * 给定 word = "ABCB", 返回 false * *//** * 思路使用递归回溯的方法 * 需要定义一个二维boolean类型的数组,用来存储当前位置是否能走通 * */public class searchWord { public static void main(String[] args) { char[][] array = {{'A','B','C','E'},{'S','F','C','S'},{'A','D','E','E'}}; Solution solution = new Solution(); boolean result = solution.exist(array, "ABCCED"); System.out.println(result); }}class Solution { public boolean exist(char[][] board, String word) { boolean[][] 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 (word.charAt(0) == board[i][j] && backtrack2(i, j, 0, word, visited, board)) return true; } } return false; } private boolean backtrack2(int i, int j, int idx, String word, boolean[][] visited, char[][] board) { if (idx == word.length()) return true; if (i >= board.length || i < 0 || j >= board[0].length || j < 0 || board[i][j] != word.charAt(idx) || visited[i][j]) return false; visited[i][j] = true; //向下找 if (backtrack2(i + 1, j, idx + 1, word, visited, board)) { return true; } //向上找 if (backtrack2(i - 1, j, idx + 1, word, visited, board)) { return true; } //向右 if (backtrack2(i, j + 1, idx + 1, word, visited, board)) { return true; } //向左 if (backtrack2(i, j - 1, idx + 1, word, visited, board)) { return true; } visited[i][j] = false; // 回溯 return false; }} 本文标题:回溯问题 文章作者:雷凯博 发布时间:2020年06月12日 - 20:06 最后更新:2021年05月16日 - 19:05 原始链接:http://yoursite.com/2020/06/12/%E5%9B%9E%E6%BA%AF%E9%97%AE%E9%A2%98/ 许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。 坚持原创技术分享,您的支持将鼓励我继续创作! 打赏 微信支付 支付宝 -------------本文结束感谢您的阅读-------------