JZ13 机器人的运动范围
JZ13 机器人的运动范围
描述
地上有一个 rows 行和 cols 列的方格。坐标从 [0,0] 到 [rows-1,cols-1] 。一个机器人从坐标 [0,0] 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 threshold 的格子。 请问该机器人能够达到多少个格子?
例如,当 threshold 为 18 时,机器人能够进入方格 [35,37] ,因为 3+5+3+7 = 18。但是,它不能进入方格 [35,38] ,因为 3+5+3+8 = 19 。
数据范围: $0≤threshold≤15 $ ,$1≤rows,cols≤100 $
进阶:空间复杂度 $O(nm) $ ,时间复杂度 $O(nm) $
示例1
1 | 输入:1,2,3 |
示例2
1 | 输入:0,1,3 |
示例3
1 | 输入:10,1,100 |
示例4
1 | 输入:5,10,10 |
题解
我们用数对$x,y$来表示机器人当前的坐标,如果从左上角开始移动,那么我们只需要只允许机器人向右和下移动即可。
做出移动,就是让$x或y$变大1,然后开始判断,判断$x和y$的每一位数字加起来是否比$threshold$大,若是的话就给答案+1,若不是就不加,然后回溯$x和y$
那么边界条件是什么?当$x和y$走出边界限制或已被访问过,使用布尔数组$visited$追踪。
代码
1 | class Solution { |