Leetcode - 576 出界的路径数

class Solution {
public:
//f[i][j][s] 代表从位置 i,j 出发,可用步数不超过 s 时的路径数量
const int MOD=1e9+7;
int limit,m,n;
    int findPaths(int _m, int _n, int N, int i, int j) {
        vector<vector<vector<int>>> dp(_m, vector<vector<int>>(_n, vector<int>(N+1,-1)));
        m=_m,n=_n,limit=N;
        return dfs(dp,i,j,0);
    }
    inline long dfs(vector<vector<vector<int>>>& dp,int x, int y, int s) {
        if(s > limit)   // 大于移动次数,方案不可行
            return 0;
        if(x < 0 || y < 0 || x >= m || y >= n) // 超出边界范围,达成目标条件
            return 1;
        if(dp[x][y][s] != -1) // 状态已经计算过了,不需要重复计算
            return dp[x][y][s];
        // 计算上、下、左、右各个方向寻找出界道路的次数,并保存状态
        return dp[x][y][s] = (
        dfs(dp , x + 1, y, s + 1) + 
        dfs(dp , x - 1, y, s + 1) + 
        dfs(dp , x, y + 1, s + 1) + 
        dfs(dp , x, y - 1, s + 1)
        ) % MOD;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值