剑指 Offer 12. 矩阵中的路径

思路:

  1. 矩阵搜索,没有规定起始位置与终止位置的时间复杂度是  O(row*col*3^k)因为要遍历每一个位置作为起始节点,由于不能访问visited,所以每一步都只有3个选择,然后最差情况走完k-1步发现不匹配

  2. visited细节

    1)visited 用set,而不新建一个borad或在原board上修改,只要使用 (r,c) in set 判断只需要O(1)

    2)visited是添加坐标,而不是board[r][c]的值,因为visited是用来实现不走回头路

    3)   我们是在每一步dfs开头添加当前坐标进 visited,而不是添加下一步的

  3. 递归细节:

    1) 每次dfs开头的判断返回值都是 判断递归到最底层后的返回值,如

        a.返回叶子节点的空节点 return None 

        b.返回一个空的列表 []

        c.返回True or False

    2)   底层的dfs还需要有变量去接受,这样才能传回外层函数

        a.  root.left = dfs()   root.right = dfs()

        b.  resList = dfs() + [curVal]

        c.  if dfs() : return True

    3)   通过这样的方式,递归结果才一层一层的传递到外层函数

        a. 获得了一二叉树

        b. 获得了一个列表

        c. 得到了True or Flase

原文地址:https://www.cnblogs.com/ChevisZhang/p/13683749.html