如题。。。。有什么简单快速的方法吗
补充:
这里的数特指正整数
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。
如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。
最快速的方法:
(number & number - 1) == 0
你可以去这里尝试自己做做http://www.codewars.com/kata/534d0a229345375d520006a0完成以后还能看到别人提交的答案,有些可能会出乎你的意料。
请问为什么我的实现最佳答案的js代码无法通过codewars的testing。。。
function isPowerOfTwo(n){ //.. should return true or false .. return n & (n-1) == 0 ? true : false; }
javaboolean isPowerOfTwo(int val) { return (val & -val) == val; }
java
boolean isPowerOfTwo(int val) { return (val & -val) == val; }
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(4)
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。
如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。
最快速的方法:
你可以去这里尝试自己做做
http://www.codewars.com/kata/534d0a229345375d520006a0
完成以后还能看到别人提交的答案,有些可能会出乎你的意料。
请问为什么我的实现最佳答案的js代码无法通过codewars的testing。。。