刷题记录-剑指offer12:矩阵中的路径
Posted tendermelon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题记录-剑指offer12:矩阵中的路径相关的知识,希望对你有一定的参考价值。
用递归实现回溯法
注意:对于越界的检查是row>=matrix.length和col>=matrix[0].length要加上等号(这个错误找了半个小时呜呜呜)
public class Solution { private int[][] act = {{0,1},{0,-1},{-1,0},{1,0}}; public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { if(matrix.length==0) return false; char[][] array = makematrix(matrix, rows, cols); boolean[][] marked = new boolean[rows][cols]; int pathlen = 0; for(int i = 0; i<rows; i++){ for(int j = 0;j<cols;j++){ if(backtrack(array, marked, str, pathlen,i, j)) return true; } } return false; } public boolean backtrack(char[][] matrix, boolean[][] marked, char[] str, int pathlen, int row, int col){ if(pathlen == str.length) return true; if(row<0||row>=matrix.length||col<0||col>=matrix[0].length||marked[row][col]||matrix[row][col]!=str[pathlen]) return false; pathlen++; marked[row][col] = true; for(int[] n: act){ if(backtrack(matrix, marked, str, pathlen,row+n[0], col+n[1])) return true; } marked[row][col] = false; return false; } public char[][] makematrix(char[]matrix, int row, int col){ char[][] array = new char[row][col]; for(int i = 0, idx = 0; i<row; i++){ for(int j = 0; j<col; j++){ array[i][j] = matrix[idx++]; } } return array; } }
以上是关于刷题记录-剑指offer12:矩阵中的路径的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题Python79. 单词搜索和剑指 Offer 12. 矩阵中的路径