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相关推荐

  1. 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: ...

  2. 32位有符号整数_008. 字符串转换整数 (atoi) | Leetcode题解

    点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  3. 008. 字符串转换整数 (atoi) | Leetcode题解

    点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  4. Leetcode题解(超赞!!!)

    我是技术搬运工,好东西当然要和大家分享啦.原文地址 算法思想 二分查找 二分查找思想简单,但是在实现时有一些需要注意的细节: 在计算 mid 时不能使用 mid = (l + h) / 2 这种方式, ...

  5. 900 多道 LeetCode 题解,这个 GitHub 项目值得 Star!

    转自 | 码农有道 大家好,我是小 G. 周末风和日丽,适合刷 LeetCode 今天给你们推荐个 GitHub 项目,里面收集了 900 多道 LeetCode 题解,并包含中英文两个版本,适合大多 ...

  6. PHP版Leetcode题解开始随缘更新

    2019独角兽企业重金招聘Python工程师标准>>> PHP版Leetcode题解 我叫skys215,是一名bug工程师. 我接触编程的时间比较早,但是因为我数学不好加上比较懒, ...

  7. [LeetCode 题解]: Binary Tree Preorder Traversal

    前言 [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...

  8. LeetCode 题解汇总

    为什么80%的码农都做不了架构师?>>>    LeetCode 题解汇总 转载于:https://my.oschina.net/michao/blog/801863

  9. leetcode题解【持续更新】

    leetcode题解不断更新,以及nowcoder题解.一起加油! 完整请移步我的Github 转载于:https://juejin.im/post/5c8a73d8f265da2de80fa774

  10. leetcode题解132-分割回文串 II

    问题描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文. 返回符合要求的 最少分割次数 . 示例 1: 输入:s = "aab" 输出:1 解释:只需一次分割 ...

最新文章

  1. 【好资源】473页斯坦福数学基础:《应用线性代数》(附pdf和ppt下载)
  2. vuecli3 引入全局scss变量_在vue-cli 3中给stylus、sass样式传入共享的全局变量
  3. Python学习---Django的request扩展[获取用户设备信息]
  4. Coursera-AndrewNg(吴恩达)机器学习笔记——第四周编程作业(多分类与神经网络)...
  5. vue基础之data
  6. 检查vCenter Server上STS证书的过期日期(79248)(STS证书过期,导致 vCenter 报503无法登陆VC)
  7. 分享一个VS2013代码窗口一闪而过的解决方案。
  8. 雅礼集训Day3-难题选讲
  9. setinterval 和 ajax,JavaScriptsetInterval和“this”解决方案
  10. web应用的跨域访问解决方案
  11. Qt_QFileInfo几个路径函数的区别
  12. 资源收集:2020年11月行政区划代码
  13. 客户信息管理系统(java)
  14. 【题解】选数字 [51nod1354]
  15. 海外文摘杂志海外文摘杂志社海外文摘编辑部2022年第4期目录
  16. 重装系统后必装的5大软件,让你大幅度提升工作效率
  17. 使用RAK7268网关与RAK3172节点连接至TTN最新的服务器TTS上
  18. linux重命名乱码文件,Linux中重命名乱码文件
  19. 思杰pvs服务器压力无法最大化,XXX学校桌面虚拟化方案重点.docx
  20. DCM4CHE实现DICOM的C-STORE --STORESCP

热门文章

  1. 天猫八大策略人群京东十大靶向人群简介
  2. 华为认证双IE网络工程师,花了三天时间整理的OSPF详解,建议收藏
  3. MySQL全局锁库锁表
  4. 〖EXP〗NSA MS17010永恒之蓝一键工具
  5. Redis过期策略和淘汰策略
  6. 矩阵卷积运算的具体过程,很简单
  7. 初级Java程序员如何向Java架构师进阶?这里有6个建议
  8. Python爬取小说网站页面制作电子书
  9. 计算机硕士-工资一览表
  10. deepin 惠普打印驱动安装