检查在 C++ 中根据给定方向移动后是否可以返回到起始位置


假设我们位于 (0, 0) 位置。我们有一个字符串,用四个字母表示连续的方向。我们必须检查在考虑所有给定方向后,我们是否可以返回到 (0, 0) 位置。符号是

  • E 代表东
  • W 代表西
  • N 代表北
  • S 代表南。

所以,如果输入类似于 "EENWWS",那么输出将为真,向东移动两个单位,然后向北,然后向西两个单位,然后再次向南,所以这是起始位置。

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

  • l := 移动数组的大小
  • 如果 l 等于 0,则 -
    • 返回真
  • lft := 0,up := 0
  • 对于初始化 i := 0,当 i < l 时,更新(i 增加 1),执行 -
    • 如果 moves[i] 等于 'W',则 -
      • (lft 增加 1)
    • 如果 moves[i] 等于 'E',则 -
      • (lft 减少 1)
    • 如果 moves[i] 等于 'N',则 -
      • (up 增加 1)
    • 如果 moves[i] 等于 'S',则
      • (up 减少 1)
  • 如果 lft 等于 0 且 up 等于 0,则 -
    • 返回真
  • 返回假

示例 (C++)

让我们看看以下实现以获得更好的理解 -

 在线演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool solve(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] == 'W') {
               lft++;
            }
            if (moves[i] == 'E') {
               lft--;
            }
            if (moves[i] == 'N') {
               up++;
            }
            if (moves[i] == 'S') {
               up--;
            }
         }
         if (lft == 0 && up == 0) {
            return true;
         }
         return false;
      }
   };
}
main(){
   Solution ob;
   cout << (ob.solve("EENWWS"));
}

输入

"EENWWS"

输出

1

更新于: 2021年1月18日

143 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告