機械人運動範圍

2021-09-12 13:33:50 字數 1004 閱讀 5558

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。 例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7 = 18。但是,它不能進入方格(35,38),因為3+5+3+8 = 19。請問該機械人能夠達到多少個格仔?

深度優先搜尋+遞迴

從0行0列的格仔開始,判斷個數字之和滿不滿足,並加入到記憶中;

在第乙個格仔的右或者下方向進行同樣的操作,遞迴;

最後統計記憶中不重複的格仔數;

# -*- coding:utf-8 -*-

class solution:

def movingcount(self, threshold, rows, cols):

# write code here

memories=set()

def dfs(i,j):

def judge(i,j):

#第一種判斷各數字之和滿不滿足條件

sum=0

while (i!=0):

sum+=i%10

i=i//10

while (j!=0):

sum+=j%10

j=j//10

return sum <=threshold

#第二種使用map判斷個數字和滿不滿足條件

#return sum(map(int,list(str(i))))+sum(map(int,list(str(j))))<=threshold

if not judge(i,j) or (i,j) in memories:

return

memories.add((i,j))

if i!=rows-1:

dfs(i+1,j)

if j!=cols-1:

dfs(i,j+1)

dfs(0,0)

return len(memories)

機械人運動範圍

題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...

機械人的運動範圍

題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...

機械人的運動範圍

題目描述 地上有乙個 rows 行和 cols 列的方格。乙個機械人從座標 0,0 的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於 threshold 的格仔。例如,當 threshold 為 18 時,機械人能夠進入方格 35,37 因為 3 ...