LeetCode - 231. Power of Two
来源:互联网 发布:python空格符表示 编辑:程序博客网 时间:2024/06/06 04:52
这道题目是要求判断一个数是不是2的指数。
一开始的想法比较简单,把小于等于这个数的2的指数逐步计算出来,然后每次判断2的指数和这个数是不是相等,如果到最后2的指数大于这个数字的时候还没有相等的情况,那么这个数字就不是2的指数。当然这种方法非常耗费时间,所以在LeetCode上面的得到的是Time Limit Exceeded。
public class Solution { public boolean isPowerOfTwo(int n) { // Corner cases if(n == 0){ return false; } if(n == 1){ return true; } int power = 1; while(power <= n){ if(power == n){ return true; } power *= 2; } return false; }}
后来看了其他人的解法,才发现还有更好的使用BIt Manipulation的解法。既然是与2的指数有关,我们可以思考一下二进制的情况:如果一个数是2的指数,那么可以确定的是它的二进制表示是只有在最高位是1,其他的位都是0,所以可以利用这一特性。如果n & (n - 1) == 0,那么可以确定这个数的二进制表示是100000000,也就是2的指数。当然也要考虑corner case,比如说输入的数字是0或者负数的情况,在那种情况下并不是2的指数。代码如下,非常简洁,只有一行:
public class Solution{public boolean isPowerOfTwo(int n){return ((n > 0) && (n & (n - 1) == 0));}}
思考:
1. 遇到与2,2的指数相关的问题可以多考虑一下二进制对题目的解法是否有用。
0 0
- [leetcode] 231.Power of Two
- LeetCode ||231. Power of Two
- [LeetCode]231.Power of Two
- Leetcode 231. Power of Two
- leetcode 231. Power of Two
- 231. Power of Two LeetCode
- [LeetCode]231. Power of Two
- [LeetCode]231. Power of Two
- LeetCode 231. Power of Two
- [leetcode] 231. Power of Two
- leetcode 231. Power of Two
- LeetCode *** 231. Power of Two
- leetcode 231. Power of Two
- LeetCode 231. Power of Two
- Leetcode-231. Power of Two
- #leetcode#231. Power of Two
- 231.[Leetcode]Power of Two
- Leetcode 231. Power of Two
- 优化Android studio/Gradle构建
- C#学习篇(一)泛型
- 考试网站
- C# ajax 异步调用webservice方法
- Java基础之异常(1)
- LeetCode - 231. Power of Two
- error 1044 (42000):access denied for user ''@'localhost' to database 'mysql' 解决方法
- Yixiaohan---003题,把优惠码存入redis数据库
- Java中重定向与请求转发的区别
- Android中dp,px,sp概念梳理以及如何做到屏幕适配
- Javascript面向对象编程(三):非构造函数的继承
- 数据库优化
- Agri-Net
- 关于线程Thread类中的 Thread(Runnable target) 构造方法的使用