LeetCode 329 每日一题 Day18.补档

hard题果然是hard题,昨天直接交的题解,今天自己写了一遍,还是犯了很多导致溢出的错误,不过也算理解了吧。
用dfs的搜索方法,同时使用记忆化,避免走重复的路,节约时间。
一般来说,dfs也好bfs也好,我都喜欢用stack和queue循环控制来实现,递归总是让我感觉不可控制,于是这道题我也自然而然地用stack来实现,结果很惨烈,想在循环中对每一个走过的节点进行计数太难了,只能牺牲空间,并且实现非常繁琐,以后还是尽量用递归吧。

再回顾一下思路:

  • 建立一个二维数组,存储以对应位置为起点可以走出的最长路径长度是多少,初始化为0.
  • 以每一个节点为起始点,用深度优先对路径进行递归,对经过节点的路径长度进行存储
  • 循环过程中,若遇见计算过路经长度的节点,跳过计算过程。

昨天偷懒,循环控制没实现成功直接就复制结果了
今天实现了一下递归的方法,中间还是犯了很多低级错误,太马虎了。

  1. 在将下一个节点投入递归时,没有注意检验数组下标的安全性,导致溢出
  2. 在存储输入数据的size前,没先判断长度的合法性,先使用了martix【0】,导致溢出。对特殊出入数据的处理一定要在所有行动之前!!!

真的挺蠢的,再一次证明了我是个马马虎虎的人,以后一定要注意数组下标的溢出
另外,昨天看题也有偏差,一开始当成要计算最长路径经过的点的和,前天的题也有偏差,我真就奇怪,我为啥就不好好看题呢?

另外我终于学到怎样是在dfs,bfs时方便的取得周围的四个或者八个坐标了,原来还能这样!学到了学到了。

class Solution {
   
public:
    static constexpr int dir[4][2] = {
   {
   -1, 0}, {
   1, 0}, {
   0, -1}, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值