假设我们有一个正整数N,我们以任何顺序(包括原始顺序)对数字重新排序,以使前导数字不为零。我们必须检查是否可以通过这种方式来使所得的数字为2的幂。因此,如果该数字类似于46,则答案是正确的。
为了解决这个问题,我们将遵循以下步骤-
定义一个称为count的方法,它将x作为输入
ret:= 0
当x不为0时
ret:= ret + 10 ^ x的最后一位
x:= x / 10
返回ret
从主要方法中执行以下操作-
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++){
f(count(1 << i) == x) return true;
}
return false;
}
};
main(){
Solution ob;
cout << (ob.reorderedPowerOf2(812));
}812
输出结果
1