剑指offer上的题目,在牛客网上刷题通过,下面记录相关思路。
题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
问题分析
这是一个典型的回溯法问题,首先我们需要明确问题的解空间并确定解空间的结构,以便回溯搜索求解。解空间是一个m x n的向量组,表示对应方格中的每一个格子是否能够达到,分别用0和1标记这两种状态,解空间的结构采用二维数组极为方便,递归前将其初始化为全0状态。
回溯的过程采用递归实现时较为容易,思路如下:
- 判断当前坐标是否可到达,需要满足一下两个条件:
- 当前所在坐标数位和不超过阈值
- 解向量中该坐标处元素值为0
- 若不可到达返回0,若可到达将向量组中该处元素置为1
- 继续对该点上(i,j+1)下(i,j-1)左(i-1,j)右(i+1,j)四个点递归上述步骤
- 递归出口是坐标值不超过矩阵四个边界