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

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

定义:dp[i][j][0]dp[i][j][0]dp[i][j][0] 表示从上方到达 (i,j)(i, j)(i,j)的路径数,dp[i][j][1]dp[i][j][1]dp[i][j][1] 表示从左方到达 (i,j)(i, j)(i,j)的路径数。

则到达某个格子的总路径数就是 dp[i][j][0]+dp[i][j][1]dp[i][j][0] + dp[i][j][1]dp[i][j][0]+dp[i][j][1]。

更新时,分方向讨论。

若上方为空格,则:dp[i][j][0]=dp[i−1][j][0]+dp[i−1][j][1]dp[i][j][0]=dp[i-1][j][0]+dp[i-1][j][1]dp[i][j][0]=dp[i−1][j][0]+dp[i−1][j][1] ;

若左方为空格,则:dp[i][j][1]=dp[i][j−1][0]+dp[i][j−1][1]dp[i][j][1]=dp[i][j-1][0]+dp[i][j-1][1]dp[i][j][1]=dp[i][j−1][0]+dp[i][j−1][1]

若上方为镜子,则:dp[i][j][0]=dp[i−1][j][1]dp[i][j][0]=dp[i-1][j][1]dp[i][j][0]=dp[i−1][j][1] ;

若左方为镜子,则:dp[i][j][1]=dp[i][j−1][0]dp[i][j][1]=dp[i][j-1][0]dp[i][j][1]=dp[i][j−1][0]

代码如下:

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;
        }
    }
};
相关推荐
吃好睡好便好6 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅6 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue9 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路10 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星10 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑10 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光10 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩11 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_6294947311 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ12 小时前
单词拆分----dp
算法