LeetCode算法题-Power Of Two(Java实现)
这是悦乐书的第194次更新,第200篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第56题(顺位题号是231)。给定一个整数,写一个函数来确定它是否是2的幂。例如:
输入:1
输出:true
说明:2^0 = 1
输入:16
输出:true
说明:2^4 = 16
输入:218
输出:false
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
此解法是做乘法,新建一个变量,初始值为1,然后循环乘以2,只要该变量小于n,最后判断该变量和n是否相等。
public boolean isPowerOfTwo(int n) {
long m = 1;
while (m < n) {
m = m*2;
}
return m == n;
}
03 第二种解法
此解法是做除法,先用n对2取余数,如果等于0,说明n是偶数,那么除以2,依次循环判断。最后判断是否和1相等。
public boolean isPowerOfTwo2(int n) {
if (n<1) {
return false;
}
while (n%2 == 0) {
n = n/2;
}
return n == 1;
}
04 第三种解法
特殊情况:当n小于1的时候,直接返回false。
正常情况:先将n转化为二进制字符串,然后判断此字符串中的1的个数,如果n是2的幂次方,那么1的个数只可能有一个,即此二进制字符串中1的第一次出现的位置和最后一次出现的位置相等。
public boolean isPowerOfTwo3(int n) {
if (n<1) {
return false;
}
String str = Integer.toBinaryString(n);
return str.indexOf("1") == str.lastIndexOf("1");
}
05 第四种解法
特殊情况:当n小于1的时候,直接返回false。
正常情况:借助包装类Integer,使用其bitCount()方法,统计其二进制数中1的个数,等于1则说明n是2的幂次方,反之则不是。
public boolean isPowerOfTwo4(int n) {
if (n<1) {
return false;
}
return Integer.bitCount(n) == 1;
}
06 第五种解法
特殊情况:当n小于1的时候,直接返回false。
正常情况:与(&)运算的规则是相同的位上均为1时结果为1,如果n是2的2的幂次方,其二进制数是只有一个1的,后面的位都是0,而n-1的二进制数是n的二进制数1变成0,n的二进制数1之后的0变成1,两者进行与(&)运算,其结果是0。比如:
1的二进制数为1,0的二进制数为0,与运算结果为0
2的二进制数为10,1的二进制数为01,与运算结果为0
4的二进制数为100,3的二进制数为011,与运算结果为0
8的二进制数为1000,7的二进制数为0111,与运算结果为0
public boolean isPowerOfTwo5(int n) {
if (n<1) {
return false;
}
return (n&(n-1)) == 0;
}
07 小结
算法专题目前已连续日更超过一个月,算法题文章56+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Power Of Two(Java实现)的更多相关文章
- LeetCode算法题-Power of Four(Java实现-六种解法)
这是悦乐书的第205次更新,第216篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第72题(顺位题号是342).给定一个整数(带符号的32位),写一个函数来检查它是否为4 ...
- LeetCode算法题-Power Of Three(Java实现-七种解法)
这是悦乐书的第204次更新,第215篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第71题(顺位题号是326).给定一个整数,写一个函数来确定它是否为3的幂.例如: 输入 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Toeplitz Matrix(Java实现)
这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ...
- LeetCode算法题-Flood Fill(Java实现)
这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733).图像由二维整数数组表示,每个整数表示图像的像素值(从0到 ...
- LeetCode算法题-Image Smoother(Java实现)
这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661).给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以 ...
- LeetCode算法题-Design LinkedList(Java实现)
这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...
- LeetCode算法题-Design HashMap(Java实现)
这是悦乐书的第299次更新,第318篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第167题(顺位题号是706).在不使用任何内置哈希表库的情况下设计HashMap.具体 ...
随机推荐
- Perl的特殊代码块:BEGIN、CHECK、INIT、END和UNITCHECK
这是5个特殊的代码块.要理解这几个块,关键在于几个时间点: (1).程序编译期间 (2).程序执行期间 (3).程序执行结束但还未退出期间 BEGIN块 BEGIN块是在程序编译期间执行的,也就是上面 ...
- ERP,ARP瘦身并如何删除。
ERP,ARP瘦身 场景:由于ARP,ERP运行近10年,日志文件多而杂.清理ERP的日志文件有利于ERP的迁移. 1)ERP的相关日志文件如下: /ora1159/prod/prodcomn/adm ...
- HTTP状态码以及其含义大全
HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码.我们在开发过程中比较常见的状态码有:200(请求成功).301(页面重定向).404( ...
- Linux服务器评测脚本 中文IO脚本简单易懂
中文版: wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/ZBench/master/ZBe ...
- [android] 开启新的activity获取他的返回值
应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面 短信发送时,可以直接选择系统联系人 界面布局是一个线性布局,里面右侧选择联系人在EditText的右上,因 ...
- webpack4 系列教程(十四):Clean Plugin and Watch Mode
作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十四):Clean Plugin and Watch Mode>原文地址.更欢迎 ...
- Java 中变量初始化、子类和父类构造器调用的顺序
先说结论 变量初始化 -> 父类构造器 -> 子类构造器 贴代码 Animcal.java 父类 public class Animal { private static int inde ...
- 9.并发_EJ
第66条: 同步访问共享可变的数据 所谓同步指的发出一个调用时,如果没有得到结果就不返回,直到有结果后再返回.另外相对应的是异步,指的是发出一个调用时就立即返回而不在乎此时有没有结果. 同步和异步关注 ...
- C#如何通过属性名称反射出属性本身
A a = new A(); Type t = typeof(A); var v1 = t.GetField("n").GetValue(a);//获取字段值,你的类A.n是字段, ...
- net core webApi返回值
1 多个参数采用结构的形式,如class xyz 2 返回值使用IActionResult 控制,不能使用httpRequestMessage类型 3 url为路由名称+Controller前缀 如下 ...