C++机器人返回原点


假设有一个机器人,其起始位置为 (0, 0)。如果我们有一系列机器人的移动指令,我们需要检查这个机器人完成所有移动后是否最终停留在 (0, 0) 位置。

移动序列以字符串的形式给出,字符 moves[i] 代表其第 i 次移动。符号 R 代表向右移动,L 代表向左移动,U 代表向上移动,D 代表向下移动。如果机器人完成所有移动后返回原点,则返回 true;否则返回 false。

例如,如果输入为 "RRULLD",则输出为 true,向右移动两格,然后向上移动一格,然后向左移动两格,最后向下移动一格,最终回到起始位置。

为了解决这个问题,我们将遵循以下步骤:

  • l := moves 数组的大小

  • 如果 l 等于 0,则:

    • 返回 true

  • lft := 0, up := 0

  • for i := 0, i < l, i++ do:

    • 如果 moves[i] 等于 'L',则:

      • lft++

    • 如果 moves[i] 等于 'R',则:

      • lft--

    • 如果 moves[i] 等于 'U',则:

      • up++

    • 如果 moves[i] 等于 'D',则:

      • up--

  • 如果 lft 等于 0 且 up 等于 0,则:

    • 返回 true

  • 返回 true

示例

让我们看下面的实现来更好地理解:

在线演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool judgeCircle(string moves) {
      int l = moves.length();
      if (l == 0) {
         return true;
      }
      int lft = 0, up = 0;
      for (int i = 0; i < l; i++) {
         if (moves[i] == 'L') {
            lft++;
         }
         if (moves[i] == 'R') {
            lft--;
         }
         if (moves[i] == 'U') {
            up++;
         }
         if (moves[i] == 'D') {
            up--;
         }
      }
      if (lft == 0 && up == 0) {
         return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.judgeCircle("RRULLD"));
}

输入

"RRULLD"

输出

1

更新于:2020年6月11日

250 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告