สมมติว่าเรามีจำนวนเต็มบวก N เราจะเรียงลำดับตัวเลขใหม่ตามลำดับใดๆ (รวมถึงลำดับเดิม) โดยที่หลักนำหน้าจะไม่เป็นศูนย์ เราต้องตรวจสอบก่อนว่าจะทำในลักษณะนี้ได้หรือไม่ ผลลัพธ์ที่ได้จะเป็นเลขยกกำลัง 2 ดังนั้นหากตัวเลขเช่น 46 คำตอบจะเป็นจริง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดวิธีการที่เรียกว่า count ซึ่งจะใช้ x เป็นอินพุต
-
ยกเลิก :=0
-
ในขณะที่ x ไม่ใช่ 0
-
ret :=ret + 10 ^ หลักสุดท้ายของ x
-
x :=x / 10
-
-
รีเทิร์น
-
จากวิธีหลัก ให้ทำดังต่อไปนี้ −
-
x :=นับ(N)
-
สำหรับผมอยู่ในช่วง 0 ถึง 31
-
ถ้า count(2^i) =x ให้คืนค่า true
-
-
คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int count(int x){
int ret = 0;
while(x){
ret += pow(10, x % 10);
x /= 10;
}
return ret;
}
bool reorderedPowerOf2(int N) {
int x = count(N);
for(int i = 0; i < 32; i++){
if(count(1 << i) == x) return true;
}
return false;
}
};
main(){
Solution ob;
cout << (ob.reorderedPowerOf2(812));
} อินพุต
812
ผลลัพธ์
1