剑指 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