检查在 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)
- 如果 moves[i] 等于 'W',则 -
- 如果 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
广告