สมมติว่ามีหุ่นยนต์และตำแหน่งเริ่มต้นคือ (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