13.机器人的运动范围

题目

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。

一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。

例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?

示例 1:

输入:m = 2, n = 3, k = 1
输出:3

示例 2:

输入:m = 3, n = 1, k = 0
输出:1

提示:

1 <= n,m <= 100
0 <=<= 20

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

一、 分析

矩阵搜索问题一般有两种思路:

  • 通过递归实现的深度优先DFS

    • 朝一个方向走到底,再回退

  • 用过队列实现的广度优先BFS

    • 按照“平推”的方式向前搜索

二、 解法一: 深度优先及优化

解法

2.1 核心递归逻辑

2.2 数位和函数

2.3 总结

  • 时间复杂度

    • 最差O(m*n)

  • 空间复杂度

    • 最差O(m*n)

三、 深度优先算法优化

在深度优先的解法中,我们才拆分为了上下左右四个方向的子问题。

但实际上本题只需要右下两个方向就可以,因为上左一定是走过的。

优化后的核心 moveTo 代码:

可以发现减少了多余的计算效率提升了不少,这点如果在面试中注意到的话是个很好的加分项哦

13

思路回顾

  • fn(x, y) 代表从 (x, y) 开始能到的格子数

  • 从左上角开始的那么我们可以转化一下

  • 即:fn(x, y) = fn(x + 1, y) + fn(x, y + 1)

四、 解法二:广度优先

广度优先解法理解相比深度优先不够直观

03

4.1 图解

来源Krahets

1
2
3
4
5
6
7
8
9

Last updated

Was this helpful?