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
首先观察输入是“DDLURD”这样形式的字符串,要想能回到原点,那么U-D,L-R必须能够完全对应
第一种做法....用数字与UDLR间建立映射,最后sum = 0即可回到原点。
class Solution {
public:
bool judgeCircle(string moves) {
int len = moves.length();
int *num = new int[len];
for (int i = 0; i < len; i++)
{
if (moves[i] == 'U')
num[i] = 1;
if (moves[i] == 'D')
num[i] = -1;
if (moves[i] == 'R')
num[i] = 100;
if (moves[i] == 'L')
num[i] = -100;
}
int sum = 0;
for (int i = 0; i < len; i++)
sum += num[i];
if (sum == 0)
return true;
else
return false;
}
};
看了discuss后发现自己蠢爆了,UD都带表竖直移动这一种行为,LR都代表水平移动这一种行为。
那么:
class Solution {
public:
bool judgeCircle(string moves) {
int len = moves.length();
int x = 0;
int y = 0;
for (int i = 0; i < len; i++)
{
if (moves[i] == 'U')
x++;
if (moves[i] == 'D')
x--;
if (moves[i] == 'R')
y++;
if (moves[i] == 'L')
y--;
}
return (x == 0 && y == 0);
}
};
我真菜