Description
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
Solution 1(C++)
class Solution {
public:
bool judgeCircle(string moves) {
int lnum=0, rnum=0, unum=0, dnum=0;
for(int i=0; i<moves.size(); i++){
switch(moves[i]){
case 'U': unum++; break;
case 'D': dnum++; break;
case 'L': lnum++; break;
case 'R': rnum++; break;
}
}
return unum==dnum && lnum==rnum;
}
};
Solution 2(C++)
class Solution {
public:
bool judgeCircle(string moves) {
int v = 0;
int h = 0;
for (char ch : moves) {
switch (ch) {
case 'U' : v++; break;
case 'D' : v--; break;
case 'R' : h++; break;
case 'L' : h--; break;
}
}
return v == 0 && h == 0;
}
};
Solution 3(C++)
class Solution {
public:
bool judgeCircle(string moves) {
unordered_map<char, int> c;
for ( char m : moves )
++c[m];
return c['L'] == c['R'] && c['U'] == c['D'];
}
};
算法分析
这个就挺简单的了,所以不多说。
程序分析
略。