地上有一个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日)