สมมติว่ามีหุ่นยนต์และตำแหน่งเริ่มต้นคือ (0, 0) ถ้าเรามีลำดับการเคลื่อนที่ของมัน เราต้องตรวจสอบว่าหุ่นยนต์ตัวนี้จบลงที่ (0, 0) หลังจากที่มันเคลื่อนที่เสร็จหรือไม่
ลำดับการย้ายจะได้รับเป็นสตริง และอักขระย้าย[i]แสดงถึงการย้าย ith ของมัน สัญลักษณ์คือ R สำหรับขวา L สำหรับซ้าย U สำหรับขึ้นและ D สำหรับลง หากหุ่นยนต์กลับไปยังจุดเริ่มต้นหลังจากเสร็จสิ้นการเคลื่อนไหวทั้งหมด ให้คืนค่า จริง มิฉะนั้น คืนค่าเท็จ
ดังนั้น หากอินพุตเป็นเหมือน "RRULLD" เอาต์พุตจะเป็นจริง สองหน่วยทางขวา จากนั้นขึ้น จากนั้นจึงปล่อยสองหน่วยแล้วลงอีกครั้ง ดังนั้นนี่คือตำแหน่งเริ่มต้น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
l :=ขนาดของอาร์เรย์ย้าย
-
ถ้า l เท่ากับ 0 แล้ว −
-
คืนความจริง
-
-
lft :=0, ขึ้น :=0
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ถ้า move[i] เหมือนกับ 'L' แล้ว −
-
(เพิ่มขึ้น lft 1)
-
-
ถ้าย้าย[i] เหมือนกับ 'R' แล้ว −
-
(ลดลงทีละ 1)
-
-
ถ้า move[i] เหมือนกับ 'U' แล้ว −
-
(เพิ่มขึ้น 1)
-
-
ถ้า move[i] เหมือนกับ 'D' แล้ว −
-
(ลดลง 1)
-
-
-
ถ้า lft เท่ากับ 0 และสูงกว่าเท่ากับ 0 ดังนั้น −
-
คืนความจริง
-
-
คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#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