ตรวจสอบว่าตัวเลขเป็นเลขยกกำลังสอง (Perfect Square) หรือไม่ โดยไม่ใช้ Math.sqrt() ใช้การวนลูปเช็คแทน
ตัวอย่างโค้ด
const isPerfectSquare = num => {
if (num < 0) return false;
let i = 1;
while (i * i <= num) {
if (i * i === num) return true;
i++;
}
return false;
};
console.log(isPerfectSquare(81)); // true
console.log(isPerfectSquare(9801)); // true
console.log(isPerfectSquare(99)); // false
console.log(isPerfectSquare(441)); // true
console.log(isPerfectSquare(7648)); // false
ผลลัพธ์
true true false true false
วิธีที่มีประสิทธิภาพมากกว่า (Binary Search)
const isPerfectSquareBS = num => {
if (num < 0) return false;
let left = 1, right = num;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
const sq = mid * mid;
if (sq === num) return true;
if (sq < num) left = mid + 1;
else right = mid - 1;
}
return false;
};
Binary Search ลดความซับซ้อนจาก O(√n) เป็น O(log n) เร็วกว่ามากสำหรับตัวเลขใหญ่