양의 정수 N이 있다고 가정하고 선행 숫자가 0이 아닌 임의의 순서(원래 순서 포함)로 숫자를 재정렬합니다. 결과 숫자가 2의 거듭제곱이 되도록 이 작업을 수행할 수 있는지 확인해야 합니다. 따라서 숫자가 46과 같으면 답은 참이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
count라는 메서드를 정의하면 x가 입력으로 사용됩니다.
-
ret :=0
-
x가 0이 아닌 동안
-
ret :=ret + 10 ^ x의 마지막 숫자
-
x :=x / 10
-
-
리턴 렛
-
주요 방법에서 다음을 수행하십시오 -
-
x :=개수(N)
-
0에서 31 사이의 i에 대해
-
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