Letcode 機械人大冒險python3實現

2021-09-28 20:49:38 字數 3053 閱讀 5020

一、思路

第一種

一開始想法是直接暴力解決,只要計算機計算能力夠強,那麼就可以直接解決。 不過會出現執行時間超時的提示,所以這種思路行不通,這是由於後面題目含有條件限制:

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表示。機械人...