Leetcode 1301:最大得分的路径数目(超详细的解法!!!)

这篇博客详细解析了LeetCode 1301题,从正方形字符数组的右下角出发,找到到达左上角的路径,计算路径得分并求最大得分及方案数。博主介绍了如何利用记忆化搜索和动态规划来解决此问题,并给出了解题思路和边界条件。同时,博主分享了其他类似问题的解法,并将代码上传至GitHub。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给你一个正方形字符数组 board ,你从数组最右下方的字符 'S' 出发。

你的目标是到达数组最左上角的字符 'E' ,数组剩余的部分为数字字符 1, 2, ..., 9 或者障碍 'X'。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。

一条路径的 「得分」 定义为:路径上所有数字的和。

请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第二个整数是得到最大得分的方案数,请把结果对 10^9 + 7 取余

如果没有任何路径可以到达终点,请返回 [0, 0]

示例 1:

输入:board = ["E23","2X2","12S"]
输出:[7,1]

示例 2:

输入:board = ["E12","1X1","21S"]
输出:[4,2]

示例 3:

输入:board = ["E11","XXX","11S"]
输出:[0,0]

提示:

  • 2 <= board.length == board[i].length <= 100

解题思路

这个问题和之前问题

Leetcode 62:不同路径(最详细的解法!!!)

Leetcode 64:最小路径和(最详细的解法!!!)

Leetcode 1102:得分最高的路径(超详细的解法!!!)

所以可以想到通过dfs加记忆化的方式来做,定义函数 f ( x , y ) f(x,y) f(x,y)的返回结果是从x,y出发到达0,0点的最大得分maxv和相应的路径数目cnt。那么对于maxv来说:

  • m a x v ( x , y ) = m a x ( m a x v ( x − 1 , y ) , m a x v ( x , y − 1 ) , m a x v ( x − 1 , y − 1 ) ) maxv(x,y)=max(maxv(x-1,y),maxv(x,y-1),maxv(x-1,y-1)) maxv(x,y)=max(maxv(x1,y),maxv(x,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值