题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
题目地址
思路
和上一道题十分相似,只不过这次的限制条件变成了坐标位数之和。对于求坐标位数之和,我们单独用一个函数实现,然后套入上一道题的代码中即可。
Python
# -*- coding:utf-8 -*- class Solution: def movingCount(self, threshold, rows, cols): # write code here if rows < 1 or cols < 1: return False visited = [False] * int(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 0 <= row < rows and 0 <= col < cols and self.getDigitSum(row)+self.getDigitSum(col)<=threshold and not visited[row*cols+col]: visited[row * cols + col] = True count = 1+ self.movingCountCore(threshold, rows, cols, row+1, col, visited) + \ self.movingCountCore(threshold, rows, cols, row-1, col, visited) + \ self.movingCountCore(threshold, rows, cols, row, col+1, visited) + \ self.movingCountCore(threshold, rows, cols, row, col-1, visited) return count def getDigitSum(self,num): sum = 0 while num: sum += num%10 num /= 10 return sum if __name__ == '__main__': result = Solution().movingCount(18,3,4) print(result)
作者:huangqiancun
出处:http://www.cnblogs.com/huangqiancun/
本博客若无特殊说明则由作者原创发布,欢迎转载,但请注明出处 :)