โจทย์
ตัดสินใจว่าตัวเลขฐานสิบของ n เมื่ออ่านจากซ้ายไปขวาและขวาไปซ้ายจะเหมือนกันหรือไม่ ตัวเลขติดลบจะไม่เป็นพาลินโดรมเสมอ เพราะมีเครื่องหมายลบ
ให้เขียนฟังก์ชัน is_palindrome_number(n)
อินพุต
n: ตัวเลขที่ต้องการตรวจสอบ
เอาต์พุต
คืนค่า true หากเป็นตัวเลขพาลินโดรม มิฉะนั้นคืนค่า false
เงื่อนไข
-10¹⁸ ≤ n ≤ 10¹⁸
ตัวอย่าง
อินพุต:
n = 12321
ผลลัพธ์ที่คาดหวัง:
expected = True
อินพุต:
long long n = 12321;
ผลลัพธ์ที่คาดหวัง:
bool expected = true;
อินพุต:
long n = 12321;
ผลลัพธ์ที่คาดหวัง:
bool expected = true;
คำอธิบาย
12321 กลับด้านแล้วยังคงเป็น 12321
อินพุต:
n = -121
ผลลัพธ์ที่คาดหวัง:
expected = False
อินพุต:
long long n = -121;
ผลลัพธ์ที่คาดหวัง:
bool expected = false;
อินพุต:
long n = -121;
ผลลัพธ์ที่คาดหวัง:
bool expected = false;
คำอธิบาย
เครื่องหมายลบทำให้ "-121" แตกต่างจาก "121-"
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
จำนวนลบเป็นพาลินโดรมไม่ได้ เพราะมีเครื่องหมายลบ
คำใบ้ 2
เทียบหลักจากทั้งสองด้านแทนการแปลงโดยไม่จำเป็น
คำใบ้ 3
เลขหลักเดียวเป็นพาลินโดรมเสมอ
ความซับซ้อนที่คาดหวัง
เวลา O(log n), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน