( 位运算 ) 231. 2 的幂 / 342. 4的幂 ——【Leetcode每日一题】

❓题目一

231. 2 的幂

难度:简单

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 `false 。

如果存在一个整数 x 使得 n = = 2 x n == 2^x n==2x ,则认为 n2 的幂次方。

示例 1:

输入:n = 1
输出:true
解释:20 = 1

示例 2:

输入:n = 16
输出:true
解释:24 = 16

示例 3:

输入:n = 3
输出:false

示例 4:

输入:n = 4
输出:true

示例 5:

输入:n = 5
输出:false

提示:

  • − 2 31 < = n < = 2 31 − 1 -2^{31} <= n <= 2^{31} - 1 231<=n<=2311

进阶: 你能够不使用循环/递归解决此问题吗?

💡思路:

基础知识必知:位运算基本原理

法一:数学

  • 2 的幂次方,二进制表示只有一个 1 存在,因此可以使用数学除法判断。

法二:循环

  • 使用位运算中的右移操作,循环判断 n 是否是2 的幂次方。

法三:判断是否只有一个1

  • 使用位运算 n & (n - 1) 的性质去掉最后一个1 ,判断是否等于 0

🍁代码:(Java、C++)

法一:数学
Java

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n == 1) return true;
        if(n <= 0 || n % 2 != 0) return false;
        return isPowerOfTwo(n / 2);
    }
}

C++

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n == 1) return true;
        if(n <= 0 || n % 2 != 0) return false;
        return isPowerOfTwo(n / 2);
    }
};

法二:循环
Java

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n <= 0) return false;
        while(n > 1){
            if((n & 1) == 1) return false;
            n >>>= 1;
        }
        return true;
    }
}

C++

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n <= 0) return false;
        while(n > 1){
            if((n & 1) == 1) return false;
            n >>= 1;
        }
        return true;
    }
};

法三:判断是否只有一个1
Java

class Solution {
    public boolean isPowerOfTwo(int n) {
        if(n <= 0) return false;
        return (n & (n - 1)) == 0;
    }
}

C++

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n <= 0) return false;
        return (n & (n - 1)) == 0;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( 1 ) O(1) O(1),法三的时间复杂度为 O ( 1 ) O(1) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

题目来源:力扣。

❓题目二

342. 4的幂

难度:简单

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false

整数 n4 的幂次方需满足:存在整数 x 使得 n = = 4 x n == 4^x n==4x

示例 1:

输入:n = 16
输出:true

示例 2:

输入:n = 5
输出:false

示例 3:

输入:n = 1
输出:true

提示:

  • − 2 31 < = n < = 2 31 − 1 -2^{31} <= n <= 2^{31} - 1 231<=n<=2311

进阶: 你能不使用循环或者递归来完成本题吗?

💡思路:

基础知识必知:一篇文章搞懂位运算

4 的幂次方,说明 n二进制表示,只有一个 1

法一:数学

  • 4 的幂次方,一定是 4 的倍数,因此可以使用数学除法判断。
    • 使用 递归 迭代判断。

法二:循环

  • 使用位运算中的 右移操作,循环判断 n 是否是4 的幂次方。
    • n3 (11) 按位与,如果不为 0 则一定不是 4 的幂。

法三:位运算

  • 使用位运算 n & (n - 1) 的性质去掉最后一个1 ,判断是否等于 0,等于 0 则说明只有一个 1
  • 然后在和0x5555555501010101 01010101 01010101 01010101按位与,判断是否等于原数,相等则为 4 的幂。

🍁代码:(Java、C++)

法一:数学
Java

class Solution {
    public boolean isPowerOfFour(int n) {
        if(n == 1) return true;
        if(n <= 0 || n % 4 != 0) return false;
        return isPowerOfFour(n / 4);
    }
}

C++

class Solution {
public:
    bool isPowerOfFour(int n) {
        if(n == 1) return true;
        if(n <= 0 || n % 4 != 0) return false;
        return isPowerOfFour(n / 4);
    }
};

法二:循环
Java

class Solution {
    public boolean isPowerOfFour(int n) {
        if(n <= 0) return false;
        while(n > 1){
            if((n & 3) != 0) return false;
            n >>>= 2;
        }
        return true;
    }
}

C++

class Solution {
public:
    bool isPowerOfFour(int n) {
        if(n <= 0) return false;
        while(n > 1){
            if((n & 3) != 0) return false;
            n >>= 2;
        }
        return true;
    }
};

法三:位运算
Java

class Solution {
    public boolean isPowerOfFour(int n) {
        if(n <= 0) return false;
        return (n & (n - 1)) == 0 && (n & 0x55555555) == n;
    }
}

C++

class Solution {
public:
    bool isPowerOfFour(int n) {
        if(n <= 0) return false;
        return (n & (n - 1)) == 0 && (n & 0x55555555) == n;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/20079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧档案馆建设之八防十防常用的设备

档案八防十防常用的十款设备 序号 名称 1 温湿度传感器 2 空气质量云测仪 3 恒湿净化一体机 4 健康防护一体机 5 综合智能触摸一体化区域控制器 6 空调红外学习控制模块 7 漏水检测控制器及感应线 8 数字烟雾传感器 9 红外防盗传感器 10 系统软件平台 附…

连接器:一种可靠耐用、节约成本的同为科技(TOWE)工业连接器

随着我国经济建设水平的飞速发展&#xff0c;工业连接器被广泛应用于工业、化工、机场、船舶、码头、建筑、铁路、医疗、会展、商业演出等领域。工业连接器的作用是用于连接一个电路导体与另一个电路导体、或一个传输元件与另一个传输元件的装置&#xff0c;并且为两个电路子系…

涅槃重生,BitKeep如何闯出千万用户新起点

在全球&#xff0c;BitKeep钱包现在已经有超过千万用户在使用。 当我得知这个数据的时候&#xff0c;有些惊讶&#xff0c;也有点意料之中。关注BitKeep这几年&#xff0c;真心看得出这家公司的发展之迅速。还记得2018年他们推出第一个版本时&#xff0c;小而美&#xff0c;简洁…

Java每日一练(20230513) 输出最值、盛水容器、旋转数组II

目录 1. 输出最值 ※ 2. 盛最多水的容器 &#x1f31f;&#x1f31f; 3. 搜索旋转排序数组 II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 输出最值…

阿里云备案服务码是什么?备案服务码申请及限制说明

阿里云备案服务码是什么&#xff1f;ICP备案服务码怎么获取&#xff1f;阿里云备案服务码分为免费和付费两种&#xff0c;申请备案服务码是有限制条件的&#xff0c;需要你的阿里云账号下有可用于申请备案服务码的云产品&#xff0c;如云服务器、建站产品、虚拟主机等&#xff…

LDAP配置与安装

LDAP配置与安装 一、安装LDAP1、安装OpenLDAP及相关依赖包2、查看OpenLDAP版本3、配置OpenLDAP数据库4、设置OpenLDAP的管理员密码5、修改配置文件5.1. 修改{2}hdb.ldif文件5.2. 修改{1}monitor.ldif文件5.3. 修改{-1}frontend.ldif文件 6、验证LDAP的基本配置7、修改LDAP文件权…

如何解决人力资本管理挑战?

人力资本管理&#xff08;HCM&#xff09;是任何企业成功的一个重要因素。得益于高效、多产和敬业的员工队伍&#xff0c;在此领域找到正确的方法和策略可以推动您取得更大的成果。 但是&#xff0c;除了关注HCM的好处和机会之外&#xff0c;你还需要做好准备&#xff0c;以克…

【Linux】volatile | SIGCHLD | 多线程概念

文章目录 1. volatile编译器优化 2.SIGCHLD信号验证SIGCHLD的存在 3. 多线程多线程概念理解概念什么是多线程调度成本低局部性原理 什么叫做进程 1. volatile 在vscode中&#xff0c;创建signal.c文件 故意在while中没有写代码块&#xff0c;让编译器认为在main中&#xff0c;…

Mac上如何装Nacos?

Nacos大家都很熟悉,服务注册中心,那么今天给大家写一篇Mac上如何装Nacos的文章。 安装步骤如下: 1、上官网 http://nacos.io/zh-cn/ 点击跳到nacos的官网上。然后点击前往Github 2、找到release 发布版本 来到GitHub上后,页面往下滑,找到latest stable release,点击…

谷歌慌了!想发论文得审批,优先开发产品,让OpenAI没得看

来源 | 机器之心 ID | almosthuman2014 众所周知&#xff0c;谷歌就像人工智能领域的「黄埔军校」&#xff0c;自深度学习兴起后培养出了整整一代机器学习研究人员和工程师。很长一段时间里&#xff0c;谷歌就是领先 AI 技术的代名词。 人们已经习惯跟随谷歌的脚步&#xff0c…

2023 年第八届数维杯大学生数学建模挑战赛 B 题详细思路 节能列车运行控制优化策略

一种可能的建模方法是基于列车的动力学方程和阻力方程&#xff0c;将列车视为单质点&#xff0c;忽略车厢间的车钩力和速度差。根据给定的参数&#xff0c;可以建立如下的方程&#xff1a; $$m(p1)\frac{dv}{dt}F-f(v)-g(i)$$ $$f(v)2.08950.0098v0.006v^2$$ $$g(i)mgi$$ 其…

酒精和肠内外健康:有帮助还是有害?

谷禾健康 酒精与健康 饮酒作为一种特殊的文化形式&#xff0c;在我们国家有其独特的地位&#xff0c;在几千年的发展中&#xff0c;酒几乎渗透到日常生活、社会经济、文化活动之中。 据2018年发表的《中国饮酒人群适量饮酒状况》白皮书数据显示&#xff0c;中国饮酒人群高达6亿…

NFTScan: 蓝筹 NFT 跌幅严重,如何保持竞争力?

最近的市场大跌影响了 NFT 二级市场&#xff0c;市场情绪冷淡下跌严重&#xff0c;交易量和买家骤然下降&#xff0c;而蓝筹作为市场里的中流砥柱也表现不佳。以 BoerdApeYachtClub 为首的等主流 NFT 价格下跌超过 20%。此外&#xff0c;随着 PFP 的热潮已经过去&#xff0c;市…

外网SSH远程连接linux服务器,看这一篇就够了

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 转载自内网穿透工具的文章&#xff1a;无公网IP&#xff0c;SSH远程连接Linux CentOS服务器【内网穿透】 本次教程我们来实现如何在外公网环境下…

你真的理解分布式数据的分区吗?

分布式数据存储是指将数据分散存储在多个节点或服务器上的技术。而分区是将数据划分为逻辑上的片段或部分&#xff0c;每个分区可以在分布式系统中的不同节点上存储。分区主要是为了可扩展性。不同的分区可以放在不共享集群中的不同节点上&#xff0c;可以帮助实现负载均衡、高…

MySQL 表操作

目录 创建表 案例 查看表结构 修改表 案例&#xff1a; 删除表 创建表 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎 ; 说明&#xff1a; field 表示列名 dat…

OTA实现设备升级方案

引言 空中下载技术&#xff08;Over-the-Air Technology&#xff0c; OTA&#xff09;是通过移动通信的空中接口实现对移动终端设备进行远程管理的技术。 该技术在IOT行业非常的重要&#xff0c;当随着市场上的产品越来越多&#xff0c;保有量也越来越多&#xff0c;随着时间…

Vue换肤主题

拷贝颜色选择组件 **ThemePicker <template><!-- navabar的换肤组件 --><el-color-pickerv-model="theme":predefine="[#409EFF,

计算机组成原理实验三-----系统总线和具有基本输入输出功能的总线接口实验

总线是计算机中连接各个功能部件的纽带&#xff0c;是计算机各部件之间进行信息传输的公共通路。 总线不只是一组简单的信号传输线&#xff0c;它还是一组协议。他有两大特征 分时: 同一总线在同一时刻&#xff0c;只能有一个部件占领总线发送信息&#xff0c;其他部件要发送…

IDEA 导入 spring 源码

文章目录 前言一、下载源码二、安装 Gradle1. 下载 Gradle2. 配置环境变量 三、导入前准备四、编译源码1. 导入源码2. 我所遇见的问题 五、测试1. 创建 module2. 编写测试代码3. 我所遇到的问题 六、总结 前言 我们在学习 spring 源码的时候&#xff0c;有时候是需要在阅读源码…