一、思路
第一種
一開始想法是直接暴力解決,只要計算機計算能力夠強,那麼就可以直接解決。 不過會出現執行時間超時的提示,所以這種思路行不通,這是由於後面題目含有條件限制:
1、2 <= command的長度 <= 1000
2、command由u,r構成,且至少有乙個u,至少有乙個r
3、0 <= x <= 1e9, 0 <= y <= 1e9
4、0 <= obstacles的長度 <= 1000
5、obstacles[i]不為原點或者終點
第二種
問題1:機械人是否會遇到障礙點,即是障礙點在不在機械人的運動路徑上?
問題2:機械人能不能到達指定終點?
即是先判斷已有的障礙點是不是在機械人經過的路徑上,若障礙點座標x0>x or y0>y時候,則這個障礙點可忽略不考略;若障礙點x0<=x and y0<=y時候,則必須考慮機械人的路徑是否要經過此點。判斷方法如下:
第一步:**獲取機械人在迴圈一次完整指令時的座標(x1,y1)
第二步:取得某個障礙點座標(x0,y0),k = min(x0//x1,y0//y1),即是得到需要指令迴圈的最少次數。如一次迴圈後坐標為(2,1),障礙點為(51,46),k=2。然後進行座標逼近操作,判斷該店是否在機械人路徑上。則逼近座標初始值為(x1k,y1k),按照數學推理可知,若果障礙點在路徑上,那麼它的座標與逼近點座標必定只相差乙個迴圈之內,意思就是肯定在以逼近座標作為初始點進行的下一迴圈內,必能找到(即是經過)該障礙點。若果沒有找到,則表示該障礙點不在機械人的預運動路徑上,不影響機械人冒險。
**第三步:**對每個障礙點進行如上第二步的操作
**第四步:**當前面所有障礙點都被判斷為無影響後,那麼就來考慮機械人是否能夠到達終點。這一步很簡單,換種說法就是,你可以把該終點看做乙個障礙點,我們需要判斷這個障礙點是否在機械人的運動軌跡上,若果在,則是表明可以到達終點,反之不能false。處理方法具體與第二步大體相同。
具體**
# -*- coding: utf-8 -*-
# /usr/bin/python
# 實驗日期:201901020
# python版本:3.6.3
class
solution
(object):
def__init__
(self)
:pass
defrobot
(command:
str, obstacles:
list
, x:
int, y:
int)
->
bool
:def
one(command)
:# 得到一次迴圈指令的座標
x1, y1 =0,
0for i in command:
if i ==
"u":
y1 +=
1else
: x1 +=
1return x1, y1
defobstacles_func
(obs)
:# 判斷單個障礙點
x1, y1 = one(command)
# 得到經過一次迴圈的座標
mi =
min(obs[0]
// x1, obs[1]
// y1)
# 得到大致經過此點的迴圈數
x1, y1 = x1 * mi, y1 * mi
# 由於//是向下取整數,所以x1,y1 <= x,y,即是在下一輪中就可判斷該障礙點是否會被經過
for i in command:
if[x1, y1]
== obs:
# 說明必將經過障礙點
return
'yes'
elif i ==
"u":
y1 +=
1else
: x1 +=
1return
'no'
# 說明不會經過該障礙點
# 如果有障礙則先判斷機械人路徑經過障礙點否
defpanduan
(obstacles)
:# 判斷所有障礙點
for i in obstacles:
if i[0]
> x or i[1]
>y:
pass
else
: value = obstacles_func(i)
if value ==
"yes"
:return
false
return
true
result = panduan(obstacles)
ifnot result:
return
false
elif result:
ret = obstacles_func(
[x, y]
)if ret ==
"yes"
:return
true
else
:return
false
if __name__ ==
"__main__"
: res = solution.robot(command=
"urr"
,obstacles=[[
2,2]
],x=
3,y=2)
print
(res)
``
leetcode LCP3 機械人大冒險(C )
力扣團隊買了乙個可程式設計機械人,機械人初始位置在原點 0,0 小夥伴事先給機械人輸入一串指令command,機械人就會無限迴圈這條指令的步驟進行移動。指令有兩種 u 向y軸正方向移動一格 r 向x軸正方向移動一格。不幸的是,在 xy 平面上還有一些障礙物,他們的座標用obstacles表示。機械人...
三 機械人大冒險(LCP3)
題目描述 力扣團隊買了乙個可程式設計機械人,機械人初始位置在原點 0,0 小夥伴事先給機械人輸入一串指令command,機械人就會無限迴圈這條指令的步驟進行移動。指令有兩種 u 向y軸正方向移動一格 r 向x軸正方向移動一格。不幸的是,在 xy 平面上還有一些障礙物,他們的座標用obstacles表...
LCP 3 機械人大冒險(雜湊)
力扣團隊買了乙個可程式設計機械人,機械人初始位置在原點 0,0 小夥伴事先給機械人輸入一串指令command,機械人就會無限迴圈這條指令的步驟進行移動。指令有兩種 u 向y軸正方向移動一格 r 向x軸正方向移動一格。不幸的是,在 xy 平面上還有一些障礙物,他們的座標用obstacles表示。機械人...