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})