361-Bomb-Enemy

原题链接

0x0 题目详情

想象一下炸弹人游戏,在你面前有一个二维的网格来表示地图,网格中的格子分别被以下三种符号占据: 'W' 表示一堵墙 'E' 表示一个敌人 '0'(数字 0)表示一个空位

361

请你计算一个炸弹最多能炸多少敌人。 由于炸弹的威力不足以穿透墙体,炸弹只能炸到同一行和同一列没被墙体挡住的敌人。 注意:你只能把炸弹放在一个空的格子里

测试用例:

示例: 输入: [["0","E","0","0"],["E","0","W","E"],["0","E","0","0"]] 输出: 3 解释: 对于如下网格

0 E 0 0 E 0 W E 0 E 0 0

假如在位置 (1,1) 放置炸弹的话,可以炸到 3 个敌人

0x1 解题思路

这道题暴力递归还是很简单的。首先我们需要遍历每一个位置,看看它能不能放炸弹。如果能放炸弹,我们就遍历该位置的上下左右四个方向。因为递归遍历时需要方向信息,所以递归函数需要额外添加一个方向参数。

注意:如果有[E,0,E,0]这种情况,在最右边放置炸弹是可以炸到最左边的人的

至于动态规划,可以照着上面的递归改改,但是很慢,不知道为什么。

0x2 代码实现

自己实现的暴力递归:

动态规划版本:

然而我看到别人的暴力求解根本不需要递归:

0x3 课后总结

有时候暴力求解不一定需要用到递归奥。

Last updated

Was this helpful?