657.机器人能否返回原点

  1. 657.机器人能否返回原点
    1. 657.1 题目
    2. 657.2 题解
      1. 使用坐标表示当前位置
    3. 657.3 代码
    4. 657.4 运行结果

657.机器人能否返回原点


657.1 题目

在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。

移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。

如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false

注意:机器人“面朝”的方向无关紧要。 R 将始终使机器人向右移动一次,L 将始终向左移动一次。此外,假设每次移动机器人的移动幅度相同。

示例 1:

输入: moves = "UD"
输出: true
解释:机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true

示例 2:

输入: moves = "LL"
输出: false
解释:机器人向左移动两次。它最终位于原点的左侧,距原点有两次 “移动” 的距离。我们返回 false,因为它在移动结束时没有返回原点。

提示:

  • 1 <= moves.length <= 2 * 10^4
  • moves 只包含字符 'U', 'D', 'L''R'

657.2 题解

使用坐标表示当前位置

// 方法一:使用坐标表示当前位置
static bool JudgeCircle1(string moves)
{
    int x = 0; // x坐标
    int y = 0; // y坐标

    // 遍历移动顺序字符串
    foreach (char move in moves)
    {
        // 更新坐标位置
        switch (move)
        {
            case 'U':
                y++;
                break;
            case 'D':
                y--;
                break;
            case 'L':
                x--;
                break;
            case 'R':
                x++;
                break;
        }
    }

    // 判断是否在原点
    return x == 0 && y == 0;
}

657.3 代码

using System;

class Program
{
    static void Main()
    {
        #region 题目

        // 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。
        // 移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。
        // 如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。
        // 注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。
        // 此外,假设每次移动机器人的移动幅度相同。

        // 示例 1:
        // 输入: moves = "UD"
        // 输出: true
        // 解释:机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true。

        // 示例 2:
        // 输入: moves = "LL"
        // 输出: false
        // 解释:机器人向左移动两次。它最终位于原点的左侧,距原点有两次 “移动” 的距离。我们返回 false,因为它在移动结束时没有返回原点。

        // 提示:
        // 1 <= moves.length <= 2 * 104
        // moves 只包含字符 'U', 'D', 'L' 和 'R'

        #endregion

        #region 测试

        // 示例 1
        string moves1 = "UD";
        bool result1 = JudgeCircle1(moves1);
        Console.WriteLine($"示例1 方法1 输出:{result1}");


        // 示例 2
        string moves2 = "LL";
        bool result2 = JudgeCircle1(moves2);
        Console.WriteLine($"示例2 方法1 输出:{result2}");

        #endregion
    }

    #region 答案

    // 方法一:使用坐标表示当前位置
    static bool JudgeCircle1(string moves)
    {
        int x = 0; // x坐标
        int y = 0; // y坐标

        // 遍历移动顺序字符串
        foreach (char move in moves)
        {
            // 更新坐标位置
            switch (move)
            {
                case 'U':
                    y++;
                    break;
                case 'D':
                    y--;
                    break;
                case 'L':
                    x--;
                    break;
                case 'R':
                    x++;
                    break;
            }
        }

        // 判断是否在原点
        return x == 0 && y == 0;
    }

    #endregion
}

657.4 运行结果

示例1 方法1 输出:True
示例2 方法1 输出:False


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏