【leetcode-python-22】874. 模拟行走机器人
渣渣原始版(超时啦!)
class Solution(object):
def robotSim(self, commands, obstacles):
"""
:type commands: List[int]
:type obstacles: List[List[int]]
:rtype: int
"""
x = 0
y = 0
n1 = 0
max_distance = 0
for i in range(len(commands)):
if commands[i] == -1:
n1 += 1
continue
elif commands[i] == -2:
n1 += 3
continue
else:
n1 = n1 % 4
if n1 == 0:
for j in range(commands[i]):
y += 1
if [x,y] in obstacles:
y -= 1
break
elif n1 == 1:
for j in range(commands[i]):
x += 1
if [x,y] in obstacles:
x -= 1
break
elif n1 == 2:
for j in range(commands[i]):
y -= 1
if [x,y] in obstacles:
y += 1
break
else:
for j in range(commands[i]):
x -= 1
if [x,y] in obstacles:
x += 1
break
max_distance = max(x**2+y**2,max_distance)
return max_distance
官方版(57.64%)
作者:LeetCode
链接:https://leetcode-cn.com/problems/walking-robot-simulation/solution/mo-ni-xing-zou-ji-qi-ren-by-leetcode/
来源:力扣(LeetCode)
用了set,会比直接检查快很多!
多次判断+set也会超时,确实用一个list放dx,dy更好。
map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function函数,返回包含每次 function 函数返回值的新列表。
class Solution(object):
def robotSim(self, commands, obstacles):
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
x = y = di = 0
obstacleSet = set(map(tuple, obstacles))
ans = 0
for cmd in commands:
if cmd == -2: #left
di = (di - 1) % 4
elif cmd == -1: #right
di = (di + 1) % 4
else:
for k in xrange(cmd):
if (x+dx[di], y+dy[di]) not in obstacleSet:
x += dx[di]
y += dy[di]
ans = max(ans, x*x + y*y)
return ans
新手入坑,多多包涵~~