依然利用回溯法
class Solution: def movingCount(self, threshold, rows, cols): # write code here if threshold < 0 or rows <= 0 or cols <= 0: return 0 visited = [0]*rows*cols count = self.movingCountCore(threshold,rows,cols,0,0,visited) return count def movingCountCore(self,threshold,rows,cols,row,col,visited): count = 0 if self.check(threshold,rows,cols,row,col,visited): visited[row*cols+col] = 1 count = 1 + self.movingCountCore(threshold,rows,cols,row-1,col,visited)\ + self.movingCountCore(threshold,rows,cols,row,col-1,visited)\ + self.movingCountCore(threshold,rows,cols,row+1,col,visited)\ + self.movingCountCore(threshold,rows,cols,row,col+1,visited) return count def check(self,threshold,rows,cols,row,col,visited): if 0 <= row < rows and 0 <= col < cols and self.getdigitSum(row)+self.getdigitSum(col) <= threshold\ and not visited[row*cols+col] : return True return False def getdigitSum(self,nums): sum = 0 while nums > 0: sum += nums % 10 nums = nums // 10 return sum