LeetCode:657. Robot Return to Origin(机器人回到原点)

描述:

There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its moves, judge if this robot ends up at (0, 0)after it completes its moves.

The move sequence is represented by a string, and the character moves[i] represents its ith move. Valid moves are R (right), L (left), U (up), and D (down). If the robot returns to the origin after it finishes all of its moves, return true. Otherwise, return false.

Note: The way that the robot is "facing" is irrelevant. "R" will always make the robot move to the right once, "L" will always make it move left, etc. Also, assume that the magnitude of the robot's movement is the same for each move.

Example 1:


Input: "LL"
Output: false
Explanation: The robot moves left twice. It ends up two "moves" to the left of the origin. We return false because it is not at the origin at the end of its moves.

 Example 2:

Input: "UD"
Output: true 
Explanation: The robot moves up once, and then down once. All moves have the same magnitude, so it ended up at the origin where it started. Therefore, we return true.

  利用HashMap存储,先将“DULR”设置为0,当最后D的数等于U的数,L的数等于R的数,说明回到了起点;

 private boolean rabotStack2(String moves) {
        Map<Character, Integer> map = new HashMap<>();
        map.put('U', 0);
        map.put('D', 0);
        map.put('L', 0);
        map.put('R', 0);
        for (char a : moves.toCharArray()) {
            if (map.keySet().contains(a))
                map.put(a, map.get(a) + 1);
            else
                return false;
        }
        // Integer范围(-128,127)之间不需要开辟新的空间,当它的值超过了这个范围就要开辟新的空间
        // 当它们比较值相等的时候,要利用equals方法进行比较
        if (map.get('U').equals(map.get('D')) && map.get('L').equals(map.get('R'))) {
            return true;
        } else {
            return false;
        }
    }

时间复杂度为:O(n)

空间复杂度为:O(n)


利用java的switch切换的基本解法:

 public boolean rabotStack3(String moves) {
        int flag1 = 0;
        int flag2 = 0;
        for (char c : moves.toCharArray()) {
            switch (c) {
                case 'U':
                    flag1++;
                    break;
                case 'D':
                    flag1--;
                    break;
                case 'L':
                    flag2++;
                    break;
                case 'R':
                    flag2--;
                    break;
                default:
                    return false;
            }
        }
        return flag1 == 0 && flag2 == 0;
    }

时间复杂度:O(n)

空间复杂度:O(1)

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/83540595