LeetCode 657. Judge Route Circle(判断环路)
题目描述
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
解法一
思路
机器人只能向上、下、左、右移动,想要路径构成环,就一定是朝相互相反的方向来回走,根据题意,最后还要回到原点。所以这题思路就很简单了,想要经过一系列移动最后还回到原点,那就必须是:向左走了多少步,就要向右走多少步;向上走了多少步,就要向下走多少步。
Python
class Solution:
def judgeCircle(self, moves):
"""
:type moves: str
:rtype: bool
"""
return len(moves) % 2 == 0 and moves.count('U') == moves.count('D') and moves.count('L') == moves.count('R')
Java
class Solution {
public boolean judgeCircle(String moves) {
if (moves.length() % 2 != 0) {
return false;
}
int countV = 0;
int countH = 0;
for (char letter : moves.toCharArray()) {
switch (letter) {
case 'U':
countV++;
break;
case 'D':
countV--;
break;
case 'L':
countH++;
break;
case 'R':
countH--;
break;
}
}
return countV == 0 && countH == 0;
}
}
C++
class Solution {
public:
bool judgeCircle(string moves) {
if (moves.length() % 2 != 0) {
return false;
}
int countV = 0;
int countH = 0;
for (auto letter : moves) {
switch (letter) {
case 'U':
countV++;
break;
case 'D':
countV--;
break;
case 'L':
countH++;
break;
case 'R':
countH--;
break;
}
}
return countV == 0 && countH == 0;
}
};