題目描述
地上有乙個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...