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
解决思路:
判断左右上下的次数,如果对等则又走回原点
class Solution {
public:
bool judgeCircle(string moves) {
bool has_circle = false;
vector<int> UDLR_counts(4, 0);
for (auto ch : moves){
switch (ch){
case 'U':
UDLR_counts[0]++; break;
case 'D':
UDLR_counts[1]++; break;
case 'L':
UDLR_counts[2]++; break;
case 'R':
UDLR_counts[3]++; break;
default:
break;
}
}
if (UDLR_counts[0] == UDLR_counts[1] && UDLR_counts[2]==UDLR_counts[3])
has_circle = true;
return has_circle;
}
};
优化实现:用两个变量x, y记录位置,每次左移对x减1,右移对x加1,y方向同理,判断x、y是否回原点即可
class Solution {
public:
bool judgeCircle(string moves) {
int x = 0, y = 0;
for (auto ch : moves){
switch (ch){
case 'U':
y++; break;
case 'D':
y--; break;
case 'L':
x--; break;
case 'R':
x++; break;
default:
break;
}
}
return (x == 0 && y == 0);
}
};