檢查在 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.