Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place.
The move sequence is represented by a string. And each move is represent by a character. The valid robot moves are R
(Right), L
(Left), U
(Up) and D
(down). The output should be true or false representing whether the robot makes a circle.
Example 1:
Input: "UD"
Output: true
Example 2:
Input: "LL"
Output: false
解法1:
class Solution(object):
def judgeCircle(self, moves):
"""
:type moves: str
:rtype: bool
out("")=True
out("L" or "D" or "U" or "R") =False
out("LR")=True
out("RL")=True
out("RLDU")=True
out("LLR")=False
"""
x = y = 0
for m in moves:
if m == "L":
x -= 1
elif m == "R":
x += 1
elif m == "U":
y += 1
else:
y -= 1
return x==0 and y==0
用查找表更好:
class Solution(object):
def judgeCircle(self, moves):
"""
:type moves: str
:rtype: bool
"""
x,y = 0,0
offsets = {"U":[0,1], "D":[0,-1], "R":[1,0], "L":[-1,0]}
for move in moves:
x,y = x+offsets[move][0], y+offsets[move][1]
return (x == 0) and (y == 0)
解法2:
def judgeCircle(self, moves):
return moves.count('L') == moves.count('R') and moves.count('U') == moves.count('D')
直接统计LR数目是否相等,同时UD数目是否相等。
类似代码:
def judgeCircle(self, moves):
c = collections.Counter(moves)
return c['L'] == c['R'] and c['U'] == c['D']
因为:
>>> import collections
>>> collections.Counter("abca")
Counter({'a': 2, 'b': 1, 'c': 1})
标签:return,Route,move,judgeCircle,657,Judge,moves,self,out
From: https://blog.51cto.com/u_11908275/6381159