zoukankan      html  css  js  c++  java
  • 判断一个数是否为2的整数次幂

    LeetCode——第231题:2的幂

    1.题目与示例描述

    题目:

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

    示例 1:

    	输入:1
    
    	输出:true
    
    	解释:2 = 1^{0}
    

    示例 2:

    	输入:218
    
    	输出:false
    

    2.解题思路与题解

    解题思路1(普通遍历):

    ​ 利用一个整型变量temp,从1开始乘以2,每次乘完的结果和目标整数相比,若temp小于目标整数则让temp继续乘以2;若temp等于目标整数,则说明目标整数是2的整数次幂,返回true;当temp大于目标整数,则结束,返回false。

    • 题解代码:
     public static boolean isPowerOfTwo(int n) {
            int temp = 1;
            while (temp <= n) {
                if (temp == n) {
                    return true;
                }
                temp *= 2;
            }
            return false;
        }
    
    • **时间复杂度:**O(logN)

    解题思路2(位运算):

    ​ 将2的整数次幂数如2、4、8写成二进制,可以发现第一位都是1,其余n位都是0,而将其减1,将得到第一位是0,其余位都是1,两数进行与运算,若结果为0,则说明输入的n是2的整数次幂,反之不是。

    2x n n - 1 n & (n - 1)
    20 0001 0000 0
    21 0010 0001 0
    22 0100 0011 0
    23 1000 0111 0
    • 题解代码:
    public static boolean isPowerOfTwo2(int n) {
            return n > 0 && (n & (n - 1)) == 0;
        }
    
    • **时间复杂度:**O(n)

    3.完整代码

    package power;
    
    public class PowerOfTwo {
        /*需要考虑目标整数为负数的情况*/
        public static void main(String[] args) {
            System.out.println(isPowerOfTwo(-1024));
            System.out.println(isPowerOfTwo(5));
            System.out.println(isPowerOfTwo(256));
        }
    
        public static boolean isPowerOfTwo(int n) {
            int temp = 1;
            while (temp <= n) {
                if (temp == n) {
                    return true;
                }
                temp *= 2;
            }
            return false;
        }
    
        public static boolean isPowerOfTwo2(int n) {
            return n > 0 && (n & (n - 1)) == 0;
        }
    }
    
  • 相关阅读:
    【Java8】 @FunctionalInterface 函数式接口
    集合使用copy与mutableCopy的区别
    GCD中的dispatch_sync、dispatch_sync 分别与串行、并行队列组合执行小实验
    podspec文件介绍
    iOS系统app崩溃日志手动符号化
    webView文本长按显示英文
    深拷贝
    view向全屏延伸时的属性设置
    iOS 模拟器截屏快捷键
    mysql 优化常用语句
  • 原文地址:https://www.cnblogs.com/blog567/p/12374662.html
Copyright © 2011-2022 走看看