劍指offer第13題 機械人的運動範圍

2021-08-21 01:31:40 字數 1425 閱讀 7399

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

classsolution:

defmovingcount(self

, threshold, rows, cols):

self.row,

self.col=rows,cols

self.dict=set()

self.search(threshold,0,

0)returnlen(self.dict)

defjudge(self

,threshold

,i,j):

returnsum(map(int

,list(str(i))))+sum(map(int

,list(str(j))))<=thresold

defsearch

(self

,threshold,i

,j):

if notself

.judge(i

,j)

or(i

,j)

inself

.dict:

returnself

.dict.add((i

,j))

ifi!=self.row-1:

self

.search(threshold,i+

1,j)

ifj!=self.col-1:

self

.search(threshold,i

,j+1)

知識點:set() map() str() 函式

其中,if not self.judge(threshold, i, j) or (i, j) in self.dict:的意思是

當i,j和大於threshold或i,j已經在dict中時 return none

returnsum(map(int

,list(str(i))))+sum(map(int

,list(str(j))))<=thresold

這句很巧妙,記住。

劍指offer第2版13題 機械人的運動範圍

小渣渣的演算法學習筆記 2018秋招備戰 資料結構類演算法總結 回溯法 1.題目描述 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動 一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 ...

劍指offer13題 機械人的運動範圍

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

劍指offer第66題 機械人的運動範圍

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