牛客网剑指offer中,“矩阵中的路径”一题有误

关于牛客网,剑指Offer中"矩阵中的路径"一题。缺少了一个testcase:
matrix = 'ABEESFCSADME', rows=3, cols=4, path='SEE'
排行榜中大部分的答案都输出了错误的结果False,正确应该是True

ABEE
SFCS
ADME

Python排行榜中的大部分答案都是这么写的,在if条件后直接return了,那么在四个方向判断中,如果先向下走,会导致提前return False,而不会再向上延伸。

# -*- coding:utf-8 -*-
class Solution:
    def hasPath(self, matrix, rows, cols, path):
        # write code here
        for i in range(rows):
            for j in range(cols):
                if matrix[i*cols+j] == path[0]:
                    if self.find(list(matrix),rows,cols,path[1:],i,j):
                        return True
        return False
    def find(self,matrix,rows,cols,path,i,j):
        if not path:
            return True
        matrix[i*cols+j]='0'
        if j+1<cols and matrix[i*cols+j+1]==path[0]:
            return self.find(matrix,rows,cols,path[1:],i,j+1)
        elif j-1>=0 and matrix[i*cols+j-1]==path[0]:
            return self.find(matrix,rows,cols,path[1:],i,j-1)
        elif i+1<rows and matrix[(i+1)*cols+j]==path[0]:
            return self.find(matrix,rows,cols,path[1:],i+1,j)
        elif i-1>=0 and matrix[(i-1)*cols+j]==path[0]:
            return self.find(matrix,rows,cols,path[1:],i-1,j)
        else:
            return False

正确的解法应该是这样。

class Solution:
    def hasPath(self, matrix, rows, cols, path):
        for i in range(rows):
            for j in range(cols):
                if matrix[i*cols + j] == path[0]:
                    if self.spread(list(matrix), rows, cols, path[1:], i, j):
                        return True
        return False

    def spread(self, matrix, rows, cols, path, i, j):
        if not path:
            return True
        matrix[i*cols + j] = '-'
        spreaded = False
        for x, y in ((i-1, j), (i+1, j), (i, j-1), (i, j+1)):
            if 0<=x<rows and 0<=y<cols and matrix[x*cols+y]==path[0]:
                if self.spread(matrix, rows, cols, path[1:], x, y):
                    spreaded = True
        return spreaded
#测试#
全部评论
这本来就是false啊
点赞 回复 分享
发布于 2019-03-04 09:26
我用我通过的代码,测试你上面的用例,输出的就是true。你哪儿来的结论:排行榜中大部分的答案都输出了错误的结果False,
点赞 回复 分享
发布于 2019-03-04 09:33
这么明显的漏洞没人发现吗?
点赞 回复 分享
发布于 2019-03-04 14:20

相关推荐

点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
一个非常好用的遍历方法
AomaYple:不是指针,是引用
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务