这是一个类似于https://leetcode.com/problems/robot-bounded-in-circle/
唯一的区别是我们对函数的输入是List,并且我们需要返回";"是";或";否";根据我们是否绕圈子来执行到达命令。
我的电流并没有通过所有的测试用例。我已经提供了代码和它没有通过的一个测试用例:
public statis List<String> doesCircleExist(List<String> commands) {
List<String> results = new ArrayList<>();
for (String command : commands) {
int currX = 0;
int currY = 0;
int currDir = 0;
// north east south west
int[][] dir = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };
for (char c : command.toCharArray()) {
switch (c) {
case 'G':
currX += dir[currDir][0];
currY += dir[currDir][1];
break;
case 'R':
currDir = (currDir + 1) % 4;
break;
case 'L':
currDir -= 1;
if (currDir < 0)
currDir = 3;
break;
}
}
if (currX == 0 && currY == 0) {
results.add("YES");
} else {
results.add("NO");
}
}
return results;
}
}
Input std(in)
3
6
L
RGRG
Your output
NO
YES
NO
Expected output
NO
YES
YES
由于这本质上是一个二维问题,并且假设圆的定义是在某个点到达起点,我只使用二维坐标,起点设置为[0,0]。
您可以按顺序解析路径,并使用一些标志变量来跟踪您所面对的位置。
从这一点来看,这只是向左/向右增加/减少第一个坐标,向上/向下增加/减少第二个坐标的问题。
然后,在每一步之后,如果你碰巧发现自己在[0,0],那么你就知道你旅行了一个"0";圆形";。