您的位置:首页 > 其它

Judge Route Circle

2017-08-15 00:00 393 查看
问题:

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

解决:

【注】 题意是机器人初始在(0,0)位置,判断该机器人上下左右移动之后,是否又回到了原位置。

① 可以返回原点的情况该字符串的长度一定可以被2整除,使用hash table进行上下左右的匹配。

public class Solution { // 31ms
public boolean judgeCircle(String moves) {
if(moves == null || moves.length() == 0) return true;
int hash[] = new int[26];
int len = moves.length();
for (int i = 0;i < len ;i ++ ) {
if(moves.charAt(i) == 'U') hash['U' - 'A'] ++;
if(moves.charAt(i) == 'D') hash['U' - 'A'] --;
if(moves.charAt(i) == 'L') hash['L' - 'A'] ++;
if(moves.charAt(i) == 'R') hash['L' - 'A'] --;
}
for(int n : hash){
if(n != 0) return false;
}
return true;
}
}

② 简化版

class Solution {//16ms
public boolean judgeCircle(String moves) {
int pu = 0;
int pl = 0;
for(char c : moves.toCharArray()){
if(c == 'U') pu ++;
if(c == 'D') pu --;
if(c == 'L') pl ++;
if(c == 'R') pl --;
}
return pu == 0 && pl == 0;
}
}

③ 进化版

public class Solution { // 9ms
public boolean judgeCircle(String moves) {
int[] hash = new int[26];
for (char c : moves.toCharArray()){
hash[c - 'A'] ++;
}
if (hash['L' - 'A'] == hash['R' - 'A'] && hash['U' - 'A'] == hash['D' - 'A']) return true;
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: