------------------------之前写笔记是不过脑子吗?????自己看都被恶心到了。。。。
以为搜易贼
两分钟写好的东西果然。。
public class Solution {
public boolean isPowerOfTwo(int n) {
int result=0;
while(true)
{
result=n/2;
if(result==1)
return false;
else if(result==0)
return true;
else
continue;
}
}
}
很明显把求余和取整弄混了
2就一点都不对了。。一定一定要取几个特殊的例子!!!蓝而2并不特殊
我太蠢了
最后AC代码如下----递交两次-第一次是0,第二次是1,估计再做power3 就得把0,1,2全部带入检验了!!
public class Solution {
public boolean isPowerOfTwo(int n) {
int result=n;
while(true)
{
if(result==1)
return true;
if(result==0)
return false;
if(result%2!=0)
return false;
result=result/2;
}
}
}
事实证明。我还是太naive
return (n>0) && (!(n&(n-1))); 一句话,就完了
&--按位与或者取地址
n=10100,n-1=10011;n&(n-1)=10000;】
如果是2的幂,其二进制表示一定是1 后面000·······这样
然而我还不明白这咋回事--去看看编程之美
---恢复内容结束---