剑指Offer:机器人的运动范围(Python语言实现)

地上有一个m行n列的方格,一个机器人从坐标(0, 0)的格子开始移动。
它每次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。
请问该机器人能够到达多少个格子?
class Solution:
    def __init__(self):
        self.visited = None

    def moving_count(self, threshold, rows, cols):
        return self.moving(threshold, rows, cols, 0, 0)

    def moving(self, threshold, rows, cols, row, col):
        if row // 10 + row % 10 + col // 10 + col % 10 > threshold:
            return 0
        if row < 0 or row >= rows or col < 0 or col >= cols:
            return 0
        if self.visited is None:
            self.visited = dict()
        if (row, col) in self.visited:
            return 0
        self.visited[(row, col)] = 1
        return 1 + self.moving(threshold, rows, cols, row-1, col) + \
            self.moving(threshold, rows, cols, row+1, col) +\
            self.moving(threshold, rows, cols, row, col-1) +\
            self.moving(threshold, rows, cols, row, col+1)


st = Solution()
threshold, rows, cols = 7, 5, 5
print(st.moving_count(threshold, rows, cols))

通常物体或者人在二维方格运动这类问题都可以用回溯法解决。

(最近更新:2019年07月10日)

上一篇:8、特征选择


下一篇:[剑指offer]机器人的运动范围