从正整数 N
开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。
如果我们可以通过上述方式得到 2 的幂,返回 true
;否则,返回 false
。
示例 1:
输入:1 输出:true
思路:
- 如何判断一个值为2的幂
我们知道,1个数乘以2就是将该数左移1位,而2的0次幂为1, 所以2的n次幂(就是2的0次幂n次乘以2)就是将1左移n位,
这样我们知道如果一个数n是2的幂,则其只有首位为1,其后若干个0,必然有n & (n - 1)为0。
因此采用(n&(n-1))来判断该值是否为2的幂。
class Solution { public: bool reorderedPowerOf2(int N) { vector<int> a; int sum; while(N>0) { a.push_back(N%10); N=N/10; } sort(a.begin(),a.end()); do { sum=0; if(a[0]==0) continue; else{ for(int i=0;i<a.size();i++) sum=sum*10+a[i]; if((sum&sum-1)==0) return true; } }while(next_permutation(a.begin(),a.end())); return false; } };