(解题思路参考的是几位朋友的,侵权联系删)
DFS深度优先搜索:
(1)首先说一下终止条件:
①行数i(从0开始)大于等于rows;
②列数j(从0开始)大于等于cols;
③行数i与列数j的各位数的和大于threshold;
④该位置已经走过,即(i,j)in res。res中记录了走过点的坐标
(2)思路:
先朝下搜到底,直到遇到终止条件;再向右搜索,再次碰到终止条件;回退到上一个节点向下搜索,不行再向右搜索,还是不行就在返回上上个节点...(递归)
(3)代码
class Solution:
def movingCount(self, threshold, rows, cols): # write code here def calSum(num): '''rc:作用是计算各位数值之和,简单一看''' sum = 0 while num: sum += num % 10 #取余数 num = num // 10 #整除,向下取整 return sum def dfs(i,j,k): '''rc:主要递归函数''' if i>=rows or j>=cols or (i,j) in res or calSum(i)+calSum(j)>k: #rc:四个终止条件 return else: res.add((i,j)) #rc:记录走过的路径 dfs(i+1,j,k) #rc:向下搜索 dfs(i,j+1,k) #rc:向右搜索 return res = set() dfs(0,0,threshold) return len(res)