Part Three 习题巧解 之 5. 2的幂

Part Three 习题巧解 之 1. 判断奇偶数
Part Three 习题巧解 之 2. 两数交换
Part Three 习题巧解 之 3. 只出现一次的数字
Part Three 习题巧解 之 4. 位1的个数

5. 2的幂

5.1 题目描述

leetcode-231. 2的幂

5.2 思路讲解

思路讲解之前,请先思考一下除了一般做法的其他思路,尽量往位运算方面靠。

5.2.1 2的幂的特性

2的幂有什么特性呢?

20=12^0=1Part Three 习题巧解 之 5. 2的幂
21=22^1=2 Part Three 习题巧解 之 5. 2的幂
22=42^2=4 Part Three 习题巧解 之 5. 2的幂
23=82^3=8 Part Three 习题巧解 之 5. 2的幂

研究一下上面的图示不难发现,2的幂有且仅有一个位为1

所以问题转换为判断Part Three 习题巧解 之 4. 位1的个数为1的情况。

注意:需要特判一下n<=0的情况,n<=0都不是2的幂

5.2.2 位运算

思路:判断n&(n-1)是否为0,若不为0则不是2的幂,若为0则是2的幂。

Part Three 习题巧解 之 5. 2的幂

原因:如果n只有一位位为1的数,那么1后面的低位都是0,根据位为1的解题思路可得n&(n-1)必为0

5.2.3 总结

思路:此题需要掌握Part Three 习题巧解 之 4. 位1的个数的解题思路以及2的幂的特征方可解决此题

位运算符的技巧:n&(n-1)消灭了最右边的位为1的数

5.3 代码实现

5.3.1 C语言

Part Three 习题巧解 之 5. 2的幂

5.3.2 Java

Part Three 习题巧解 之 5. 2的幂


6. 写在最后

系列解题文章已经第五篇了,你是否觉得n&(n-1)运算有许多巧妙之处。希望看完这篇文档的你,能动手验证一下。纸上得来终觉浅,绝知此事要躬行。


7. 文档分享

如果您觉得这份关于2的幂的文档还不错,尝试点击分享这份文档给好友吧!


作者 @MythicalCreature
于2020 年 08月 20日发布