[LeetCode] Power of Two 判断2的次方数

 

Given an integer, write a function to determine if it is a power of two.

Example 1:

Input: 1
Output: true

Example 2:

Input: 16
Output: true

Example 3:

Input: 218
Output: false

 

这道题让我们判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数,那么对于这种玩数字的题,我们应该首先考虑位操作 Bit Operation。在LeetCode中,位操作的题有很多,比如比如 Repeated DNA Sequences,Single Number,  Single Number II, Grey Code, Reverse Bits,Bitwise AND of Numbers Range,Number of 1 Bits 和 Divide Two Integers 等等。那么我们来观察下2的次方数的二进制写法的特点:

1     2       4         8         16   ....

1    10    100    1000    10000 ....

那么我们很容易看出来2的次方数都只有一个1,剩下的都是0,所以我们的解题思路就有了,我们只要每次判断最低位是否为1,然后向右移位,最后统计1的个数即可判断是否是2的次方数,代码如下:

 

解法一:

class Solution {
public:bool isPowerOfTwo(int n) {int cnt = 0;while (n > 0) {cnt += (n & 1);n >>= 1;}return cnt == 1;} 
};

 

这道题还有一个技巧,如果一个数是2的次方数的话,根据上面分析,那么它的二进数必然是最高位为1,其它都为0,那么如果此时我们减1的话,则最高位会降一位,其余为0的位现在都为变为1,那么我们把两数相与,就会得到0,用这个性质也能来解题,而且只需一行代码就可以搞定,如下所示:

 

解法二:

class Solution {
public:bool isPowerOfTwo(int n) {return (n > 0) && (!(n & (n - 1)));} 
};

 

类似题目:

Number of 1 Bits

Power of Four

Power of Three

 

参考资料:

https://leetcode.com/problems/power-of-two/discuss/63974/Using-nand(n-1)-trick

https://leetcode.com/problems/power-of-two/discuss/63972/One-line-java-solution-using-bitCount

 

LeetCode All in One 题目讲解汇总(持续更新中...)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电路补习笔记】9、电容式开关电源(电荷泵)

目录分类原理电荷泵基础开关电容稳压器的细调功能电荷泵的电压增益调节输出电容(Co)优点电容式开关稳压器减小纹波相关应用老师的主页:唐老师讲电赛 视频地址: 电源大师3——电容式开关电源(电荷泵)工作原理…

CPU 硬盘性能到底相差多少

本文以一个现代的、实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据吞吐量。通过粗略的估算PC各个组件的相对运行速度,希望能给大家留下一个比较直观的印象。本文中的数据来自…

Datatables 构建响应式

https://datatables.net/extensions/responsive/

【电路补习笔记】10、电感式开关电源(BUCK 降压电路)

目录分类封装焊线式覆晶式开关电源三种基本的非隔离开关电源纹波(ripple)开关电源的元件构成有源开关肖特基二极管或快恢复二极管不使用普通硅二极管的原因电感电容分压电阻(输出电压设置)工作原理工作模式连续模式(co…

php中Session的生成机制、回收机制和存储机制探究

转载:http://www.jb51.net/article/53938.htm这篇文章主要介绍了php中Session的生成机制、回收机制和存储机制探究,可以帮助大家对Session有一个全面的了解,需要的朋友可以参考下1、php中session的生成机制我们先来分析一下PHP中是怎么生成一个session的。设计出session的目的是…

FFT(模板)

优美 这里写代码片 #include<cstdio> #include<cstring> #include<iostream> #include<cmath>using namespace std;const int N301000; const double piacos(-1.0); struct node{double x,y;node (double xx0,double yy0){xxx;yyy;} }; node a[N],b[N]…

iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料

注意要加头文件目录 /System/Library/Frameworks/CoreTelephony.framework/Headers 到 build 设置 Header Search Paths&#xff0c;并在使用到这些类中加头文件&#xff0c;例如1. #import "CTCarrier.h" 2. #import "CTTelephonyNetworkInfo.h" iOS 4.0 …

datatables隐藏列设置及获取隐藏列的值

https://blog.csdn.net/bingguang1993/article/details/84649674

wsl2 Ubuntu 18.04 安装 ROS

目录前期准备安装ROS初始化rosdep测试前期准备 WSL的安装见旧版 WSL 的手动安装步骤从步骤4开始弄。 图形界面安装见在WSL中使用GPU&#xff1a;WSL2 Ubuntu 18.04 CUDA Gnome图形界面环境配置 界面汉化见WSL-Ubuntu安装中文语言 这里使用鱼香ROS大佬的一键安装脚本&…

Udi Dahan对于业务逻辑重用以及微服务方面的观点

今年的DDD Exchange大会在伦敦如期举行&#xff0c;Udi Dahan在大会上的一场演讲中从一种不同的角度对业务逻辑进行了剖析。他表示&#xff1a;近三十年来&#xff0c;重用已经成为了一种口号&#xff0c;它几乎可以套用在系统开发中的每一个环节上。但重用其实是一种砒霜&…

微软移除Visual Studio 2015中的UML

微软已经在Visual Studio 2015中移除了UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;&#xff0c;原因是该语言使用率过低。因此微软要优化产品结构&#xff0c;把好钢用在刀刃上。 Visual Studio高级产品经理Jean-Marc Prieur表示&#xff0…

GPU CUDA 经典入门指南

转自&#xff1a;http://luofl1992.is-programmer.com/posts/38830.html CUDA编程中&#xff0c;习惯称CPU为Host&#xff0c;GPU为Device。编程中最开始接触的东西恐怕是并行架构&#xff0c;诸如Grid、Block的区别会让人一头雾水&#xff0c;我所看的书上所讲述的内容比较抽象…

Jquery创建动态表单

$(document).ready(function(){$("#button1").click(function(){//获取html <body></body>的Jquery对象var body $("body");//创建表单var form $("<form></form>");//将表单放入body中body.append(form);//设置表单各…

用PyQt实现透明桌面时钟小部件

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- coding: utf-8 -*-Created on 2012-4-6author: wangxiaoimport sys from PyQt4 import QtGui, QtCore from PyQt4.QtCore import Qt from PyQt4.QtCore import QPoint from PyQt4.QtCore…

实现织梦dedecms百度主动推送(实时)网页抓取

做百度推广的时候&#xff0c;如何让百度快速收录呢&#xff0c;下面提供了三种方式&#xff0c;今天我们主要讲的是第一种。 如何选择链接提交方式 1、主动推送&#xff1a;最为快速的提交方式&#xff0c;推荐您将站点当天新产出链接立即通过此方式推送给百度&#xff0c;以保…

高性能CSS(一)

避免使用import 有两种方式加载样式文件&#xff0c;一种是link元素&#xff0c;另一种是CSS 2.1加入import。而在外部的CSS文件中使用import会使得页面在加载时增加额外的延迟。虽然规则允许在样式中调用import来导入其它的CSS&#xff0c;但浏览器不能并行下载样式&#xff0…

【RK3399Pro学习笔记】十八、点亮LED灯(python、C语言、bash)

目录GPIOpython3python-peripherypython2RPiC语言SysFs方式编写gpiolib.cgpiolib.hmain.c编译测试wiringPibash平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 GPIO (机翻)下表显示了座子的引脚&am…

Jquery - 添加属性、添加class、添加Css

Jquery - 添加属性、添加class、添加Css 一.设置属性&#xff1a; 方式一 jQuery 代码: $("img").attr({ src: "test.jpg", alt: "Test Image" } 方式二&#xff1a;jQuery代码--键值对 $("img").attr("src","te…

PHP笔记——java程序员看懂PHP程序

PHP笔记——java程序员看懂PHP程序 php是一种服务器端脚本语言&#xff0c;类型松散的语言。<?php ?> xml风格<script language”php”></script> 脚本风格 <? ?> 简短风格 <% %> ASP风格 以;结尾&#…

C# mysql 插入数据,中文乱码

用C#操作mysql时&#xff0c; 插入数据中文都是乱码&#xff0c;只显示问号&#xff0c;数据库本身使用的是utf-8字符。网上百度一下有两种解决办法&#xff1a; 一种是在执行语句前面设置&#xff0c;如&#xff1a;MySQLCommand mCommand new MySQLCommand("set names …