漫画:判断 2 的乘方
2018-01-02 本文已影响31人
大胡子商人
![](https://img.haomeiwen.com/i1765518/8de5bb4bba853572.jpg)
![](https://img.haomeiwen.com/i1765518/bdcbaeb826f106fe.jpg)
![](https://img.haomeiwen.com/i1765518/e8d87167845492ae.jpg)
![](https://img.haomeiwen.com/i1765518/194dc7c36902df35.jpg)
小灰陷入了回忆当中……
![](https://img.haomeiwen.com/i1765518/177bbabcde3d0e59.jpg)
![](https://img.haomeiwen.com/i1765518/2f1c96cf92558af8.jpg)
![](https://img.haomeiwen.com/i1765518/b3212c8b1c379671.jpg)
题目:实现一个方法,判断一个正整数是否是2的乘方(比如16是2的4次方,返回True;18不是2的乘方,返回False)。要求性能尽可能高。
![](https://img.haomeiwen.com/i1765518/775b64dbc4edce5a.jpg)
![](https://img.haomeiwen.com/i1765518/29a2da818bc72a23.jpg)
解法一:
创建一个中间变量Temp,初始值是1。然后进入一个循环,循环中每次让Temp和目标整数比较,如果相等,则说明目标整数是2的乘方;如果不相等,则让Temp增大一倍,继续循环比较。当Temp大于目标整数时,说明目标整数不是2的乘方。
如果目标整数的大小是N,则此方法的时间复杂度是O(LogN)。
![](https://img.haomeiwen.com/i1765518/2cc090d95b603d14.jpg)
![](https://img.haomeiwen.com/i1765518/d2c25f2b87b71ca4.jpg)
![](https://img.haomeiwen.com/i1765518/cebf941d318f72cc.jpg)
![](https://img.haomeiwen.com/i1765518/e3e6c35492fd51ca.jpg)
![](https://img.haomeiwen.com/i1765518/be6dbe1dde0d50da.jpg)
![](https://img.haomeiwen.com/i1765518/a3f2c3539e227505.jpg)
![](https://img.haomeiwen.com/i1765518/931ddaff81455a5c.jpg)
![](https://img.haomeiwen.com/i1765518/cb11839ac6e33f1b.jpg)
![](https://img.haomeiwen.com/i1765518/ccb73e9916f21ebb.jpg)
![](https://img.haomeiwen.com/i1765518/94d1436f686b02c0.jpg)
![](https://img.haomeiwen.com/i1765518/37a41526aaddd935.jpg)
![](https://img.haomeiwen.com/i1765518/770be94ffbb825e8.jpg)
![](https://img.haomeiwen.com/i1765518/1730456fb28385e3.jpg)
![](https://img.haomeiwen.com/i1765518/9be621e9e284159d.jpg)
![](https://img.haomeiwen.com/i1765518/f0a42759dbba87c8.jpg)
![](https://img.haomeiwen.com/i1765518/94aa2bd2646c58b5.jpg)
![](https://img.haomeiwen.com/i1765518/4a2feb39a390fcdd.jpg)
![](https://img.haomeiwen.com/i1765518/2e5ebb9ecd1c1386.jpg)
![](https://img.haomeiwen.com/i1765518/31039b4fb3d81903.jpg)
![](https://img.haomeiwen.com/i1765518/3a75acc0faa76d84.jpg)
![](https://img.haomeiwen.com/i1765518/ee024a1208595b4e.jpg)
![](https://img.haomeiwen.com/i1765518/956247435883f723.jpg)
![](https://img.haomeiwen.com/i1765518/406f00ef29ed4892.jpg)
解法二:
非常有趣也非常简单的解法。因为2的乘方都符合一个规律,即 N&N-1 等于 0,所以直接用这个规律判断即可。该算法时间复杂度是O(1)。
![](https://img.haomeiwen.com/i1765518/6050201bd0c53a03.jpg)
![](https://img.haomeiwen.com/i1765518/7eb311c5b38d4b8b.jpg)
![](https://img.haomeiwen.com/i1765518/19d1cbbc53a2931c.jpg)
思考题:
实现一个方法,求出一个正整数转换成二进制后的数字“1”的个数。要求性能尽可能高。
![](https://img.haomeiwen.com/i1765518/22d866251739594a.jpg)