面试题13.机器人的运动幅度来源:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcoftitle地面上有一个m行n列的正方形,从坐标[0,0]到坐标[m-1,n-1]。机器人从坐标[0,0]的格子开始移动,每次可以左右上下各移动一个格子(不能移出格子),不能进入格子的总和大于k格的行坐标和列坐标的位数。例如,当k为18时,机器人可以进入[35,37]方格,因为3+5+3+7=18。但是不能进入方格[35,38],因为3+5+3+8=19。机器人可以到达多少个格子?示例1:输入:m=2,n=3,k=1输出:3示例2:输入:m=3,n=1,k=0输出:1提示:1<=n,m<=1000<=k<=20解题思路:广度优先搜索这是一个搜索问题,本文将使用广度优化搜索的方法来解决这个问题。先看题目中的要求,【不能进入行坐标和列坐标的位数之和大于k的格子】。这里有一个问题,如何计算一个数的各位数字之和?计算一个数的位数之和,可以对数i取10的余数,就可以知道个位数,累加;然后将i除以10,即删除个位;重复计算直到i为0结束,返回数字Sum。虽然标题说机器人可以左右上下移动,但实际上可以简化为只能上下左右搜索。如下图所示:具体代码如下。代码实现类解决方案:defmovingCount(self,m:int,n:int,k:int)->int:defeach_ele_sum(num):"""计算一个数的各位的和"""res=0whilenum:res+=num%10num//=10returnresfromqueueimportQueueq=Queue()q.put((0,0))ans=set()而不是q.empty():i,j=q.get()if(i,j)notinansand0<=i
