题解 | #矩阵中的路径#
矩阵中的路径
https://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6
kotlin
//递归加回溯
object Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix char字符型二维数组 * @param word string字符串 * @return bool布尔型 */ val stringBuilder = StringBuilder() var result= false fun hasPath(matrix: Array<CharArray>,word: String): Boolean { val record = Array<BooleanArray>(matrix.size) { BooleanArray(matrix[0].size) } for(i in matrix.indices) { for(j in matrix[0].indices) { if(result) return result dfs(matrix, record, word, 0, i, j) } } return result } private fun dfs(matrix: Array<CharArray>, record: Array<BooleanArray>, word: String, pos: Int, down: Int, right: Int) { if (stringBuilder.toString() == word) { result = true return } //判断边界和对比每一个字符是否相同,字符不同终止判断 if(down < 0 || down == matrix.size || right < 0 || right == matrix[0].size || record[down][right] || pos == word.length || result || matrix[down][right] != word[pos]) return stringBuilder.append(matrix[down][right]) record[down][right] = true dfs(matrix, record, word, pos + 1, down + 1, right) dfs(matrix, record, word, pos + 1, down - 1, right) dfs(matrix, record, word, pos + 1, down, right + 1) dfs(matrix, record, word, pos + 1, down, right - 1) record[down][right] = false stringBuilder.deleteCharAt(stringBuilder.length - 1) } }