地上有乙個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 ...