剑指offer:机器人的运动范围-创新互联
题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
class Solution:
def movingCount(self, threshold, rows, cols):
# 判断(row, col)是否可以进入:位置合法且未进入过
def isValid(row, col):
if row < 0 or row >= rows or col < 0 or col >= cols:
return False
num = 0
while row > 0:
num += row % 10
row //= 10
while col > 0:
num += col % 10
col //= 10
return num <= threshold
def helper(row, col):
cnt = 0 # 对于每个位置,在确认过可以访问之前先初始化为0
if isValid(row, col) and not visited[row][col]:
# 如果(row, col)可以进入,那么将其设为已访问,然后对四个邻居进行访问
visited[row][col] = True
cnt = (1 + helper(row + 1, col) + helper(row - 1, col)
+ helper(row, col + 1) + helper(row, col - 1))
return cnt
if threshold < 0:
return 0
visited = [[False] * cols for _ in range(rows)]
return helper(0, 0)
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:剑指offer:机器人的运动范围-创新互联
网站路径:http://pwwzsj.com/article/djpchd.html