โจทย์: Self-Dividing Numbers
เลขที่ทุกหลัก (digit) หารตัวเลขนั้นลงตัว (และไม่มีหลัก 0)
ตัวอย่าง: 128 → 1|128, 2|128, 8|128 → YES
10 → มี 0 → NO
26 → 2|26 ใช่, 6|26 ไม่ใช่ → NO
ตัวอย่างโค้ด
public class Demo {
static boolean isSelfDividing(int num) {
int original = num;
while (num > 0) {
int digit = num % 10;
if (digit == 0 || original % digit != 0) {
return false;
}
num /= 10;
}
return true;
}
public static void main(String[] args) {
int[] tests = {1, 12, 15, 24, 128, 10, 26, 100, 111, 124};
for (int n : tests) {
System.out.println(n + " → " + (isSelfDividing(n) ? "YES" : "NO"));
}
// หา self-dividing numbers ใน range
System.out.println("\nSelf-dividing numbers 1-1000:");
for (int i = 1; i <= 1000; i++) {
if (isSelfDividing(i)) System.out.print(i + " ");
}
}
}
ผลลัพธ์
1 → YES 12 → YES 15 → NO 24 → YES 128 → YES 10 → NO 26 → NO 100 → NO 111 → YES 124 → YES Self-dividing numbers 1-1000: 1 2 3 4 5 6 7 8 9 11 12 15 22 24 33 36 44 48 55 66 77 88 99 111 112 115 122 124 128 132 135 144 155 162 168 175 184 212 216 222 224 244 248 264 288 312 315 324 333 336 366 384 396 412 416 424 432 444 448 488 515 555 612 624 636 648 666 672 715 728 735 777 784 812 816 824 848 864 888 912 915 924 936 966 999
Complexity
- Time: O(d) where d = จำนวนหลัก (≤ 10 สำหรับ int)
- Space: O(1)
LeetCode Problem
LeetCode 728. Self Dividing Numbers - โจทย์เดียวกัน