题解 | #矩阵中的路径#
矩阵中的路径
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)
}
}
查看11道真题和解析
