LeetCode 题解之 231. Power of Two
231. Power of Two
题目描述和难度
- 题目描述:
给定一个整数,写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1 输出: true
示例 2:
输入: 16 输出: true
示例 3:
输入: 218 输出: false
- 题目难度:简单。
- 英文网址:231. Power of Two 。
- 中文网址:231. 2的幂 。
思路分析
求解关键:方法很多,给出几个比较好理解的。我个人觉得主要的考点还是在位运算的一些性质上。
参考解答
参考解答1:可能是最简单的一个版本吧,n & (n - 1)
运算,能把一个二进制数最右边的 1 变成 0,这一点应该作为一条基本性质记住。
public class Solution {public boolean isPowerOfTwo(int n) {return n > 0 && (n & (n - 1)) == 0;}
}
参考解答2:该方法可以用于整除判断。
public class Solution2 {public boolean isPowerOfTwo(int n) {if (n <= 0) {return false;}while (n % 2 == 0) {n /= 2;}return n == 1;}
}
参考解答3:用到了 Java 库函数,并且还可以根据此法判定一个数是否是 3 的方幂、4 的方幂等等。
public class Solution3 {public boolean isPowerOfTwo(int n) {return n > 0 && Integer.toString(n, 2).matches("^10*$");}
}
参考解答4:打表法,把所有可能的结果都例举出来。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;public class Solution4 {public boolean isPowerOfTwo(int n) {if (n <= 0) {return false;}// 比 Integer.MAX_VALUE 小的所有的整数中 2 的方幂的所有的数int[] nums = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824};HashSet<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}return set.contains(n);}// 该 main 方法可以得到整型范围内所有的 2 的方幂public static void main(String[] args) {int i = 1;List<Integer> list = new ArrayList<>();while (i > 0 && i < Integer.MAX_VALUE) {list.add(i);i *= 2;}System.out.println(list);}
}
参考解答5:该方法对于判定质数的方幂同样有效,例如判定一个数是否是 3 的方幂,不过得事先计算出在允许的范围内 3 的方幂的最大者。
public class Solution5 {public boolean isPowerOfTwo(int n) {// 1073741824 是小于 Integer.MAX_VALUE 中 2 的方幂的最大者return n > 0 && 1073741824 % n == 0;}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0231-power-of-two ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。
.label-warning {
background-color: #f0ad4e;
}
.label-success {background-color: #5cb85c;
}.label-danger {background-color: #d9534f;
}.label {display: inline;padding: .2em .6em .3em;font-size: 75%;font-weight: 700;line-height: 1;color: #fff;text-align: center;white-space: nowrap;vertical-align: baseline;border-radius: .25em;
}
LeetCode 题解之 231. Power of Two相关推荐
- leetcode 231. Power of Two 判断是否为2的幂 Java
231. Power of Two Given an integer, write a function to determine if it is a power of two. Credits: ...
- 32位有符号整数_008. 字符串转换整数 (atoi) | Leetcode题解
点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- 008. 字符串转换整数 (atoi) | Leetcode题解
点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- Leetcode题解(超赞!!!)
我是技术搬运工,好东西当然要和大家分享啦.原文地址 算法思想 二分查找 二分查找思想简单,但是在实现时有一些需要注意的细节: 在计算 mid 时不能使用 mid = (l + h) / 2 这种方式, ...
- 900 多道 LeetCode 题解,这个 GitHub 项目值得 Star!
转自 | 码农有道 大家好,我是小 G. 周末风和日丽,适合刷 LeetCode 今天给你们推荐个 GitHub 项目,里面收集了 900 多道 LeetCode 题解,并包含中英文两个版本,适合大多 ...
- PHP版Leetcode题解开始随缘更新
2019独角兽企业重金招聘Python工程师标准>>> PHP版Leetcode题解 我叫skys215,是一名bug工程师. 我接触编程的时间比较早,但是因为我数学不好加上比较懒, ...
- [LeetCode 题解]: Binary Tree Preorder Traversal
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...
- LeetCode 题解汇总
为什么80%的码农都做不了架构师?>>> LeetCode 题解汇总 转载于:https://my.oschina.net/michao/blog/801863
- leetcode题解【持续更新】
leetcode题解不断更新,以及nowcoder题解.一起加油! 完整请移步我的Github 转载于:https://juejin.im/post/5c8a73d8f265da2de80fa774
- leetcode题解132-分割回文串 II
问题描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文. 返回符合要求的 最少分割次数 . 示例 1: 输入:s = "aab" 输出:1 解释:只需一次分割 ...
最新文章
- 【好资源】473页斯坦福数学基础:《应用线性代数》(附pdf和ppt下载)
- vuecli3 引入全局scss变量_在vue-cli 3中给stylus、sass样式传入共享的全局变量
- Python学习---Django的request扩展[获取用户设备信息]
- Coursera-AndrewNg(吴恩达)机器学习笔记——第四周编程作业(多分类与神经网络)...
- vue基础之data
- 检查vCenter Server上STS证书的过期日期(79248)(STS证书过期,导致 vCenter 报503无法登陆VC)
- 分享一个VS2013代码窗口一闪而过的解决方案。
- 雅礼集训Day3-难题选讲
- setinterval 和 ajax,JavaScriptsetInterval和“this”解决方案
- web应用的跨域访问解决方案
- Qt_QFileInfo几个路径函数的区别
- 资源收集:2020年11月行政区划代码
- 客户信息管理系统(java)
- 【题解】选数字 [51nod1354]
- 海外文摘杂志海外文摘杂志社海外文摘编辑部2022年第4期目录
- 重装系统后必装的5大软件,让你大幅度提升工作效率
- 使用RAK7268网关与RAK3172节点连接至TTN最新的服务器TTS上
- linux重命名乱码文件,Linux中重命名乱码文件
- 思杰pvs服务器压力无法最大化,XXX学校桌面虚拟化方案重点.docx
- DCM4CHE实现DICOM的C-STORE --STORESCP