สมมติว่าเรามีจำนวนเต็มบวก 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