苦逼的触及着码农之门:昨天刚开始想着从简单的题目开始刷题,就被这所谓的第一道easy题目刷的搞了一早上搞得蓬头垢面,我决定在坚持一点时间,如果自己码代码的能力依旧入刺之弱的话,就考虑毕业后就转行。。 (安慰自己到 毕竟我没有码过代码,而且是java代码,更是才开始接触,坚持两个月看下子集有没有提高!!!java 老娘不搞定你 就去转行)
一.题目
Given an integer, write a function to determine if it is a power of two. (判断一个输是否是2的幂 2^n)
二.思路
该链接下列出了到2的200次幂,自己可以先感受下那个数字有多大。。
看到题目第一反应 用2去除,对于小数字多除几次没问题,对于大数字呢,还不要除个n年n月?
第二反应,用2去取余数,可是这样子除了2的幂,还有一大部分是偶数而非2的幂,再来一层判断?好累的说?
还有什么思路的?
首先看题目的要求,返回是boolean类型,所以是判断这个数是 (true) 或者 不是(false) 2的次幂;
似乎自己比较笨,看到下面这个博客才盗窃了别人的点子: http://blog.csdn.net/hackbuteer1/article/details/6681157
利用2的幂 其二进制上的特点,来进行判断; 2^n在二进制上都是1000...0(n个零的特点); 减去1,二进制上就会变成1111....111(n个零)
学习java中按位与(&) / 按位或(|) / 逻辑与(&&) / 逻辑或(||)
三.java 代码
public class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}
算是给自己心理上的安慰,今天的这个题目逻辑上不是很复杂。呜呜,算是学到了2^n在2进制上的特点。。