คำอธิบายปัญหา
กำหนดจำนวนเต็มบวก N จัดเรียงตัวเลขใหม่ได้ (ไม่มี leading zero) ตรวจสอบว่าสามารถจัดเป็น power of 2 ได้หรือไม่
ตัวอย่าง: 46 → true (จัดเป็น 64 = 2⁶)
วิธีแก้ปัญหา (Digit Count Signature)
- สร้าง signature ของตัวเลข: นับจำนวนตัวเลข 0-9 (เข้ารหัสเป็น int)
- คำนวณ signature ของ N
- เปรียบเทียบกับ signature ของ 2⁰ ถึง 2³¹
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countSignature(int x) {
int sig = 0;
while(x > 0) {
sig += pow(10, x % 10); // ใช้ power of 10 เป็น digit counter
x /= 10;
}
return sig;
}
bool reorderedPowerOf2(int N) {
int target = countSignature(N);
for(int i = 0; i < 31; i++) {
if(countSignature(1 << i) == target) return true;
}
return false;
}
};
int main() {
Solution ob;
cout << (ob.reorderedPowerOf2(812) ? "true" : "false");
return 0;
}
อินพุต
812
เอาต์พุต
1