【c++leetcode】判断一个数是否是2的幂、3的幂、4的幂
2的幂
题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
思路:一个数是2的次方那么它32位上只能有一个1,其他都是0
方法1:通过将这个数与1进行&运算,判断1的个数是否是1.
class Solution {public:bool isPowerOfTwo(int n) {int t = n;int ones = 0;while(t > 0){ones += (t & 1);t >>= 1;}return ones == 1;}
};
方法2:
利用n&(n-1)判断是否为0,如果是0则为2的幂
class Solution {public:bool isPowerOfTwo(int n) {// int t = n;// int ones = 0;// while(t > 0){// ones += (t & 1);// t >>= 1;//}//return ones == 1;if(n == 1){return true;}else if(n > 1){return ((n%2) == 0) && isPowerOfTwo(n/2);}else{return false;}}};
3的幂
和判断2的幂的方法一样。
class Solution
{public:bool isPowerOfThree(int n) {if(n <= 0)return false;else if(n == 1)return true;elsereturn n % 3 == 0 && isPowerOfThree(n / 3);}
};
4的幂(按照题目要求,不能使用循环或者迭代)
题目:给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。你能不使用循环或者递归来完成本题吗?
思路:一个数是4的幂一定是2的幂,但是一个数是2的幂不一定是4的幂。如下图所示,上下两幅图加起来就是2的幂,但是4的幂只在基位,因此可以通过与奇数位都是1,偶数为都是0的数(1010101010101010101010101010101)进行与运算,结果仍为原来数。
class Solution {public:bool isPowerOfFour(int num) {return num > 0 && !(num & num - 1) && (num & 0x55555555) == num;}
};
【c++leetcode】判断一个数是否是2的幂、3的幂、4的幂相关推荐
- 【LeetCode】陌陌面试-有序数组于其一个元素翻转后,判断一个数是否存在数组中,时间复杂度O(logn)
1.有序数组,判断一个数是否存在于数组中,时间复杂度O(logn) 解题思路: 二分法,在有序数组中,提高时间复杂度的一个方法. 代码: def demo(nums, target):left,rig ...
- 位图法:判断一个数是否在40亿个整数中?
微信搜索[程序员囧辉],关注这个坚持分享技术干货的程序员. 题目 最近看到一个题目:给40亿个不重复的 unsigned int 的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个 ...
- 位运算判断一个数是奇数还是偶数
在 leetcode 上刷题的时候,有道题需要判断一个数是奇数还是偶数.看到大神写的判断方法.记录一下 代码如下 int t = 3; // 要判断的数. int odd = t & 1; / ...
- 判断一个数为多少位 比如 3 是 1位 102 是3位。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //判断一个数为多少位 比如 3 是 1位 102 是3位. #include <iostream> us ...
- python判断一个数是整数、浮点数还是字符串
python判断一个数是整数.浮点数还是字符串 示例代码:
- C语言判断一个数是否是回文数
C语言判断一个数是否是回文数 #include <stdio.h> int main(){int num, s, y = 0;printf("请输入一个数字: ");s ...
- c语言判断2 1000素数,2是不是素数(C语言判断一个数为素数)
我听说西方不承认2是质数,而中国承认 到底是不是真的 2是质数.质数又称素数.一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则称为合数.2是一个大于1的自然数,这一点满足质数 ...
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
1.腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? 思想:用数组来存这40亿个数,而且只能用bit来表示.why? ...
- 判断一个数是否是2的倍数----------面试算法
思考: 如果要判断一个数是2的倍数,只需要判断这个数的二进制的第一位是1,其他的位都是0就可以. 也就是形如: 100 10000 1000000 注意,上面都是二进制的表示 关键是怎么判断只有第一位 ...
最新文章
- MS SQL Server和MySQL区别
- QuickPager asp.net 分页控件 转
- js检测鼠标是否在操作_原生JS趣味demo:炫酷头像鼠标追随效果的实现
- SUSE Linux维护笔记三
- python 同时发多个请求_PythonWebServer如何同时处理多个请求
- web 前端签名插件_10款前端开发神器,助你成前端高手?
- 逆向分析 工具、加壳、安全防护篇
- 微信小程序弹框的使用
- Java简介:Java是什么?及Java语言的特点
- Transmission 下载列表、下载文件 迁移机器指南
- 【从零开始游戏开发】EmmyLua插件注解功能
- 基于c#的winform中图片放大后不清晰问题
- 图像识别毕业设计 人脸识别与疲劳检测系统设计与实现 - python opencv
- 论文笔记-Understanding Convolution for Semantic Segmentation
- Android 地图导航调用百度地图、高德地图、腾讯地图
- Linus批评英特尔的LAM代码,拒绝将其合并到内核
- Android 对apk进行重签名和查看签名(window 和mac)及生成签名
- 一维卷积的意义和二维卷积(图像处理)的简单理解
- 横空出世!IDEA画图神器来了,比Visio快10倍
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。