Tidy Number คือตัวเลขที่ตัวเลขแต่ละหลักเรียงลำดับจากน้อยไปมาก (non-decreasing order) เช่น 123, 489, 234557
ตัวอย่าง
489 // tidy number 234557 // tidy number 34535 // ไม่ใช่ tidy number (5 > 3)
ตัวอย่างโค้ด (Recursive)
const num = 234789;
const isTidy = (num, last = 10) => {
if (num) {
const currentDigit = num % 10;
// ตรวจสอบว่าหลักปัจจุบันไม่เกินหลักก่อนหน้า (อ่านจากขวาไปซ้าย)
if (currentDigit > last) {
return false;
}
// เรียกซ้ำด้วยตัวเลขที่ตัดหลักสุดท้ายออก และอัปเดต last
return isTidy(Math.floor(num / 10), currentDigit);
}
return true;
};
console.log(isTidy(num)); // true
หลักการทำงาน
- อ่านตัวเลขจากหลักหน่วยขึ้นไป (ขวาไปซ้าย)
- ตัวแปร
lastเก็บค่าหลักก่อนหน้า (เริ่มต้นที่ 10 เนื่องจากหลักสูงสุดคือ 9) - ถ้าหลักปัจจุบันมากกว่า
lastแสดงว่าไม่เรียงลำดับ → false - เรียกฟังก์ชันซ้ำจนกว่าจะหมดตัวเลข
ผลลัพธ์
true
หมายเหตุ: วิธีแบบ iterative ก็ทำได้เช่นกัน โดยแปลงเป็นสตริงแล้วเปรียบเทียบตัวอักษรแต่ละคู่