LeetCode 3665. 统计镜子反射路径数目

很经典的题型,但由于有方向限制,在更新 dp 时需要多考虑方向。

定义:dpij0dpij0dpij0 表示从上方到达 (i,j)(i, j)(i,j)的路径数,dpij1dpij1dpij1 表示从左方到达 (i,j)(i, j)(i,j)的路径数。

则到达某个格子的总路径数就是 dpij0+dpij1dpij0 + dpij1dpij0+dpij1

更新时,分方向讨论。

若上方为空格,则:dpij0=dpi−1j0+dpi−1j1dpij0=dpi-1j0+dpi-1j1dpij0=dpi−1j0+dpi−1j1

若左方为空格,则:dpij1=dpij−10+dpij−11dpij1=dpij-10+dpij-11dpij1=dpij−10+dpij−11

若上方为镜子,则:dpij0=dpi−1j1dpij0=dpi-1j1dpij0=dpi−1j1

若左方为镜子,则:dpij1=dpij−10dpij1=dpij-10dpij1=dpij−10

代码如下:

cpp 复制代码
#define MOD 1000000007
class Solution {
public:
    int uniquePaths(vector<vector<int>>& grid) {
        int m = grid.size(), n = grid[0].size();
        int ans = 0;
        vector dp(m, vector<vector<long long int> >(n, vector<long long int>(2, 0)));
        dp[0][0][0] = 1;
        for(int i = 0;i<m;i++){
            for(int j = 0;j<n;j++){
                if(i==0 && j==0) continue;
                if(i > 0){
                    if(grid[i-1][j]==0){
                        dp[i][j][0] = (dp[i-1][j][0] + dp[i-1][j][1])%MOD;
                    } else{
                        dp[i][j][0] = dp[i-1][j][1]%MOD;
                    }
                }
                if(j>0){
                    if(grid[i][j-1]==0){
                        dp[i][j][1] = (dp[i][j-1][1] + dp[i][j-1][0])%MOD;
                    } else{
                        dp[i][j][1] = dp[i][j-1][0]%MOD;
                    }
                }
            }
        }
        if(grid[m-1][n-1] == 1){
            return 0;
        } else{
            return (dp[m-1][n-1][0] + dp[m-1][n-1][1]) %MOD;
        }
    }
};
相关推荐
AI备案指南-满满40 分钟前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
土司大王2 小时前
LeetCode hot100——两两交换链表中的节点
算法·leetcode·职场和发展
大熊背3 小时前
树莓派IspPipeline LSC模块原理详解
算法·lsc·isppipeline·mesh lsc
测试19983 小时前
Selenium 无法定位元素的几种解决方案
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
zander2584 小时前
LeetCode 300. 最长递增子序列
算法·leetcode·深度优先
欧叶冲冲冲4 小时前
Python常见数据结构的CRUD(LeetCode高频版速查)
数据结构·python·leetcode
祖力554 小时前
Linux应用软件编程:目录IO与framebuffer
linux·运维·算法·framebuffer·目录io
名字还没想好☜4 小时前
Go 用 slices/maps 标准库泛型函数:告别手写 Contains、Sort、去重(Go 1.21)
开发语言·后端·算法·golang·go
地平线开发者4 小时前
【模型轻量化专题】深度学习模型为什么需要轻量化
算法
圣保罗的大教堂5 小时前
leetcode 3622. 判断整除性 简单
leetcode