zoukankan      html  css  js  c++  java
  • [LeetCode] 231. Power of Two ☆(是否2 的幂)

    描述

    Given an integer, write a function to determine if it is a power of two.

    给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

    解析

    2的幂只有1个1

    仔细观察,可以看出 2 的次方数都只有一个 1 ,剩下的都是 0 。根据这个特点,只需要每次判断最低位是否为 1 ,然后向右移位,最后统计 1 的个数即可判断是否是 2 的次方数。

    减一法

    如果一个数是 2 的次方数的话,那么它的二进数必然是最高位为1,其它都为 0 ,那么如果此时我们减 1 的话,则最高位会降一位,其余为 0 的位现在都为变为 1,那么我们把两数相与,就会得到 0。

    比如 2 的 3 次方为 8,二进制位 1000 ,那么 8 - 1 = 7,其中 7 的二进制位 0111。

    正、负相与

    4的二进制100。

    -4的二进制为4的补码。即取反+1。

    先对 00000000 00000000 00000100取反后是11111111 11111111 11111111 11111011,取反后加1得11111111 11111111 11111111 11111100,正是最后结果。

    相与&,还是4。

    代码

    class Solution {
        public boolean isPowerOfTwo(int n) {
            int cnt = 0;
            while (n > 0) {
                cnt += (n & 1);
                n >>= 1;
            }
            return cnt == 1;
        }
    }
    class Solution {
        public boolean isPowerOfTwo(int n) {
            if (n <= 0) {
                return false;
            }
            return (n & (n - 1)) == 0;
        }
    }
    class Solution {
        public boolean isPowerOfTwo(int n) {
            if (n <= 0) {
                return false;
            }
            return n == (n & -n);
        }
    }
  • 相关阅读:
    python pymouse用法记录
    Mac启动时:boot task failed:fsck-safe处理办法
    命令行唤起xcode模拟器
    web中使用svg失量图形及ie8以下浏览器的处理方式
    博客文章索引
    中文编码基础知识
    深度学习基础之线性回归学习
    机器学习/深度学习最基础的数学知识
    css节点选择器
    css属性分类介绍
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/10696739.html
Copyright © 2011-2022 走看看