[剑指Offer]12. 矩阵中的路径

2021/3/27,题意如下:在这里插入图片描述
其实也没啥好说的,深搜+剪枝就行了,不过代码中还是有很多细节要注意的。
c++参考代码:

class Solution {
public:
   int n,m; 
   int f[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    bool dfs(vector<vector<char>> board, string word,int i,int j,int k)
    {
      if(k==word.size())
      return true;
      char c=board[i][j];
      board[i][j]='\0';//剪枝
      for(int a=0;a<4;++a)
      {
          int nexti=i+f[a][0];
          int nextj=j+f[a][1];
          if(nexti>=n||nextj>=m||nexti<0||nextj<0)
          continue;
          if(board[nexti][nextj]==word[k])
          {
              if(dfs(board,word,nexti,nextj,k+1))
              return true;
          }
      }
        board[i][j]=c;//恢复
        return false;
    }
    bool exist(vector<vector<char>>& board, string word) {
      n=board.size();
      if(word.size()==0)
      return true;
      if(!n)
      return false;
      m=board[0].size();
      for(int i=0;i<n;i++)
      {
          for(int j=0;j<m;j++)
          {
              if(board[i][j]==word[0])
              {
                  if(dfs(board,word,i,j,1))
                  return true;
              }
          }
      }
      return false;
    }
};

在这里插入图片描述
时间复杂度 O(3KMN): 最差情况下,需要遍历矩阵中长度为 K 字符串的所有方案,时间复杂度为 O(3K),矩阵中共有 MN个起点,时间复杂度为 O(MN) 。方案数计算: 设字符串长度为 K ,搜索中每个字符有上、下、左、右四个方向可以选择,舍弃回头(上个字符)的方向,剩下 3 种选择,因此方案数的复杂度为 O(3K)。
空间复杂度 O(K) : 搜索过程中的递归深度不超过 K ,因此系统因函数调用累计使用的栈空间占用 O(K)。
参考资料
·Krahets《面试题12. 矩阵中的路径( DFS + 剪枝 ,清晰图解)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值