(解题思路参考的是几位朋友的,侵权联系删)
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)
京公网安备 11010502036488号