题目描述

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

解法一

思路

机器人只能向上、下、左、右移动,想要路径构成环,就一定是朝相互相反的方向来回走,根据题意,最后还要回到原点。所以这题思路就很简单了,想要经过一系列移动最后还回到原点,那就必须是:向左走了多少步,就要向右走多少步;向上走了多少步,就要向下走多少步。

Python

class Solution:
    def judgeCircle(self, moves):
        """
        :type moves: str
        :rtype: bool
        """
        return len(moves) % 2 == 0 and moves.count('U') == moves.count('D') and moves.count('L') == moves.count('R')

Java

class Solution {
    public boolean judgeCircle(String moves) {
        if (moves.length() % 2 != 0) {
            return false;
        }
        int countV = 0;
        int countH = 0;
        for (char letter : moves.toCharArray()) {
            switch (letter) {
                case 'U':
                    countV++;
                    break;
                case 'D':
                    countV--;
                    break;
                case 'L':
                    countH++;
                    break;
                case 'R':
                    countH--;
                    break;
            }
        }
        return countV == 0 && countH == 0;
    }
}

C++

class Solution {
public:
    bool judgeCircle(string moves) {
        if (moves.length() % 2 != 0) {
            return false;
        }
        int countV = 0;
        int countH = 0;
        for (auto letter : moves) {
            switch (letter) {
                case 'U':
                    countV++;
                    break;
                case 'D':
                    countV--;
                    break;
                case 'L':
                    countH++;
                    break;
                case 'R':
                    countH--;
                    break;
            }
        }
        return countV == 0 && countH == 0;
    }
};