66.机器人的运动范围
题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
解题思路
这题和上一题有点类似。我们需要添加限制条件,我们用一个函数计算横纵坐标之和。然后利用递归计算格子数量。但是要注意计算过的格子不能再算入次数内,需要一个限制矩阵temp判断是否走过当前的格子。
Python代码如下
# -*- coding:utf-8 -*-
class Solution:
def movingCount(self, threshold, rows, cols):
# write code here
temp = [[0]*cols for _ in range(rows)]
return self.sub(0,0,rows,cols,threshold,temp)
def sub(self,i,j,rows,cols,threshold,temp):
if i<0 or i>=rows or j<0 or j>=cols or self.get_sum(i)+self.get_sum(j)>threshold or temp[i][j] == 1:
return 0
temp[i][j] =1
return (self.sub(i-1,j,rows,cols,threshold,temp)
+self.sub(i+1, j, rows, cols, threshold, temp)
+ self.sub(i , j-1, rows, cols, threshold, temp)
+ self.sub(i , j+1, rows, cols, threshold, temp)+1)
def get_sum(self,num):
sum = 0
while num :
sum += num % 10
num /=10
return sum