美文网首页
面试题13.机器人的运动范围_hn

面试题13.机器人的运动范围_hn

作者: 1只特立独行的猪 | 来源:发表于2020-03-29 16:56 被阅读0次

    题目描述

    地上有一个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 <= k <= 20

    解答方法

    方法一:BFS

    思路

    广度优先搜索一般使用队列来实现。我们先将 (0, 0)加入队列,当队列不为空时,每次将队首坐标出队,加入到集合中,再将满足以上两个条件的坐标加入到队尾,直到队列为空。

    代码

    class Solution:
        def movingCount(self, m: int, n: int, k: int) -> int:
            def sums(x):
                sum = 0
                while x:
                    sum += x%10
                    x //= 10
                return sum
            marked = set()
            queue = [(0, 0)]
            while queue:
                x, y = queue.pop(0)
                if (x, y) not in marked and sums(x)+sums(y) <=k:
                    marked.add((x,y))
                    #仅考虑向右和向下
                    for dx, dy in [(0,1), (1, 0)]:
                        new_x = x + dx
                        new_y = y + dy
                        if new_x >=0 and new_x < m and new_y >=0 and new_y < n:
                            queue.append((new_x, new_y))
            return len(marked)
    

    时间复杂度

    O(m×n)

    空间复杂度

    O(m×n)

    相关文章

      网友评论

          本文标题:面试题13.机器人的运动范围_hn

          本文链接:https://www.haomeiwen.com/subject/vwceuhtx.html