[LeetCode]Power of N
题目:Power of Two
Given an integer, write a function to determine if it is a power of two.
题意:判断一个数是否是2的k次方数。
思路:
2的次方数使用2进制表示则必然只有最高位是1其他都是0;
这样判断一个数最多需要循环32次就能得出结果。
则程序如下:
bool isPowerOfTwo(int n){
if (!n)return false;
while ((n&0x01) != 0x01){//2的次方则只有最高位是1
n = n >> ;
}
return n == ;
}
但是这样还有循环,如何不使用循环一下子判断出来呢?
思路2:
2的次方使用二进制只有一个1,而是用下面的方法,可以判断一个二进制序列中只有一个1.
n&(n-1);//n-1会将n中从小到大第一个为1的位置变成0,这样就能判断只有一个1的情况。
bool isPowerOfTwo(int n){
//2的幂只有一个1,则使用n&(n-1)来统计1的个数
return n > && !(n & (n - ));
}
题目:Power of Three
Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
题意:判断一个数是否是3的k次幂数。
要求:不能使用递归或循环。
思路:
如果可以使用循环,也很简单每次对3求余,就可以了。
bool isPowerOfThree(int n) {
while (n >= ){
if (n % )return false;
n /= ;
}
return n == ;
}
但是,要求不使用循环或递归。
仔细想想,3的k次幂的数就是,该数的因子只有3,那么使用一个在int范围内最大的3的k次幂的数对给定的数求余,如果为0就说明它是3的k次幂的数。
扩展开来,所有的判断n的k次幂的数都是可以使用这个方法。
bool isPowerOfThree(int n) {
//int中3的最大次幂数1162261467
return n > && !( % n);
}
题目:Power of Four
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
题意:判断一个数是否是4的k次幂数。
要求:不能使用递归或循环。
思路:
4的次幂,乍一看好像和2的次幂差不多,能不能用类似的方法来求解呢?
仔细一想肯定发现不能单纯判断一个1来判断4的次幂,为什么呢?因为4的次幂写成2进制,1只会出现奇数的位置上,当然排除1的情况。
那么只需要在判断1是不是在奇数的位置上是不是就可以判断它是不是4的k次幂。
推敲一下发现可行,程序如下:
bool isPowerOfFour(int n){
return n > && !(n & (n - )) && ((n & 0x55555555) == n);//0x55555555保证在奇数的位置上的1被保留
}
思路2:
还有一个思路,4^k - 1 = ?
如果k是偶数,不妨设k = 2;因式分解得到(4 - 1)*(4 + 1);
如果k是奇数,不妨设k = 3;因式分解得到(4 - 1)*(4^2 + 4 + 1);
如果k > 2;不妨设k = 2t,则因式分解得到(4^t - 1)*(4^t + 1)
(4^t - 1)同上面的情况,可以发现总可以分出一个(4 - 1)的因子,所以,4^k - 1 必定会有3的因子。
数学不精,没办法精确证明。
bool isPowerOfFour(int n){
return n > && !(n & (n - )) && !((n - )%);
}
[LeetCode]Power of N的更多相关文章
- [LeetCode] Power of Four 判断4的次方数
Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example: Gi ...
- [LeetCode] Power of Three 判断3的次方数
Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...
- [LeetCode] Power of Two 判断2的次方数
Given an integer, write a function to determine if it is a power of two. Hint: Could you solve it in ...
- LeetCode Power of Four
原题链接在这里:https://leetcode.com/problems/power-of-four/ 题目: Given an integer (signed 32 bits), write a ...
- LeetCode Power of Three
原题链接在这里:https://leetcode.com/problems/power-of-three/ 与Power of Two类似.检查能否被3整除,然后整除,再重复检查结果. Time Co ...
- Leetcode Power of Two
Given an integer, write a function to determine if it is a power of two. 题目意思: 给定一个整数,判断是否是2的幂 解题思路: ...
- Leetcode Power of two, three, four
Given an integer, write a function to determine if it is a power of two. Hint: Could you solve it in ...
- leetcode power(x,n)
class Solution { public: double pow(double x, int n) { double a=1; if(n==0)return 1; if(x==1)return ...
- LeetCode——Power of Two
Description: Given an integer, write a function to determine if it is a power of two. public class S ...
随机推荐
- Mysql主从复制原理及搭建
## Mysql主从复制原理 主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中.对于多级复制,数据库服务器即可充当主机,也可充当从 ...
- Docker安装Skywalking APM分布式追踪系统
环境介绍 本文使用虚拟机unbutu18+docker.本unbutu18系统IP地址为:192.168.150.134 大家在使用时记得将此地址换成自己的实际地址. docker的安装可参考:htt ...
- 移动端 rem单位做适配的 媒体查询节点
@media screen and (min-width:300px){html,body,input{font-size:15px}}@media screen and (min-width:320 ...
- Java IO体系之File类浅析
Java IO体系之File类浅析 一.File类介绍 位于java.io下的Java File类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等.File对 ...
- 域渗透-LSA Protection
简介: 微软在 2014 年 3 月 12 日添加了 LSA 保护策略,用来防止对进程 lsass.exe 的代码注入,这样一来就无法使用 mimikatz 对 lsass.exe 进行注入,相关操作 ...
- Salesforce LWC学习(五) LDS & Wire Service 实现和后台数据交互 & meta xml配置
之前的几节都是基于前台变量进行相关的操作和学习,我们在项目中不可避免的需要获取数据以及进行DML操作.之前的内容中也有提到wire注解,今天就详细的介绍一下对数据进行查询以及DML操作以及Wire S ...
- springboot--事务的使用
@Transactional原理 事务是一些sql语句对数据库操作的集合,因此如果在一个Java方法里涉及了对数据库的操作,业务需要的话我们就可以考虑把这些操作作为一个事务.通过在方法上加个@Tran ...
- 【Jmeter】- 使用 jmeter 进行 dubbo 接口测试
大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用.而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求.所以 ...
- mongodb 启动 WARNING: soft rlimits too low, transparent_hugepage/enabled is 'always'. never
今天启动mongodb的时候,之前一直没注意,今天发现又warning,想整一整. 下面是告警 2019-09-05T12:00:55.271+0800 I CONTROL [initandliste ...
- P3355 骑士共存问题 二分建图 + 当前弧优化dinic
P3355 骑士共存问题 题意: 也是一个棋盘,规则是“马”不能相互打到. 思路: 奇偶点分开,二分图建图,这道题要注意每个点可以跑八个方向,两边都可以跑,所以边 = 20 * n * n. 然后di ...