劍指offer 機械人的運動範圍

2021-09-26 15:58:53 字數 2227 閱讀 1520

題目描述

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

solution

bfs,時間複雜度未通過,僅記錄面試之用。

class

solution

:def

__init__

(self)

: self.matrix =

self.visit =

self.cnt =

0 self.cols =

0 self.rows =

0 self.threshold =

0 self.x =[-

1,1,

0,0]

self.y =[0

,0,-

1,1]

defmovingcount

(self, threshold, rows, cols)

:if threshold <

0or rows <

0or cols <0:

return

0 self.rows, self.cols, self.threshold = rows, cols, threshold

self.matrix =[[

none

for _ in

range

(cols)

]for _ in

range

(rows)

] self.visit =[[

false

for _ in

range

(cols)

]for _ in

range

(rows)

] start = location(0,

0)self.bfs(start)

return self.cnt

defbfs(self, start)

: q =

[start]

# self.visit[start.x][start.y] = true

while

len(q)!=0

: cur = q.pop(0)

if self.check(cur)

: self.cnt +=

1 self.visit[cur.x]

[cur.y]

=true

for i in

range(4

):newx, newy = cur.x+self.x[i]

, cur.y+self.y[i]

nextnode = location(newx, newy)

if self.check(nextnode)

:def

check

(self, node)

:if node.x >=

0and node.x < self.rows and node.y >=

0and node.y < self.cols\

and self.visit[node.x]

[node.y]

==false

: digitx =

[int

(digit)

for digit in

str(node.x)

] digity =

[int

(digit)

for digit in

str(node.y)]if

sum(digitx+digity)

<= self.threshold:

return

true

else

:return

false

class

location

:def

__init__

(self, x, y)

: self.x, self.y = x, y

劍指offer 機械人運動範圍

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

劍指offer 機械人的運動範圍

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

劍指offer 機械人的運動範圍

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