[leetcode]231. Power of Two,判断数字是否为2的n次方

一、题目描述

判断一个数字是否为2的n次方。例子如下:

Example 1:

Input: 1
Output: true 
Explanation: 2的0次方 = 1

Example 2:

Input: 16
Output: true
Explanation: 2的4次方 = 16

Example 3:

Input: 218
Output: false

二、解题思路

         这道题在leetcode中属于easy,也是有着40%以上的ac率,因此是非常简单的一种,我的解题思路如下,既然判断一个数是否为2的次方数,那么就理所应当的可以借助二进制的做法,一个2的整次方的数字的二进制表示形式是这样的,100000..,即第一位为1,剩下的位数全部为0,这样我们就可以将这个二进制数字不断的右移,直至它等于一,同时算出右移了n位,再生成一个左移n位的数字对比即可,如果相同则表示是一个2的n次方数字,如果不同则不是。代码如下:

public boolean isPowerOfTwo(int n) {
        if (n<=0){
            return false;
        }
        int m =0;
        int tmp = n;
        while (tmp!=1){
            tmp=tmp>>1;
            m++;
        }
        if (Math.pow(2,m)==n){
            return true;
        }
        return false;
    }

   更巧妙的解法——一行代码完事

public boolean isPowerOfTwo(int n) {
    return ((n & (n-1))==0 && n>0);
}

         这个是看到别人写的一行代码,确实当时就震惊了,为什么自己已经想到了这个问题与二进制有关,为什么没有再到想利用二进制去解决呢?

         这个人就是直接利用2的次方数字,二进制表示形式,首位为1,剩余均为0的特点,直接让n-1,则得到的是与n“互补”的形式,第一位为0,剩余位为1的二进制表现形式,如果二者进行与操作,把1全部消除得到0的话, 标明这个数字即为2的次方数字。很巧妙。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值