已解决
算法通关村第十三关白银挑战——幂运算问题解析
来自网友在路上 166866提问 提问时间:2023-11-03 02:43:40阅读次数: 66
最佳答案 问答题库668位专家为你答疑解惑
大家好,我是怒码少年小码。
今天的主题是幂运算。LeetCode中主要是判断一个数是不是某一个正整数的整数次幂。
2 的幂
LeetCode 231:给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
示例 1:
- 输入:n = 1
- 输出:true
- 解释:2^0 = 1
示例 2:
- 输入:n = 16
- 输出:true
- 解释:2^4 = 16
方法一:用除的方法
逐步缩小的方法是如果n 是 2的幂,则 n >0,且存在非负整数k使得 n = 2 ^k
- 首先判断n是否是正整数,如果n是0 或负整数,则n一定不是2的幂
- 然后为了判断n是否是2的幂,可以连续对n进行除以2的操作,直到n不能被2整除。此时如果n = 1(最后2/2一定等于1),则n是2的幂,否则n不是2的幂。
bool isPowerOfTwo(int n) {if(n <= 0){return false;}//如果n还是偶数就让他一直除于2,例while(n % 2 ==0){n /= 2;}return n == 1;
}
方法二:采用位运算
思路与统计数字转换成二进制数之后1的个数一致
如果正整数是2 的幂,当且仅当n的二进制表示中只有最高位是1,其余位都是0,此时满足 n & (n - 1) = 0。
public boolean isPowerOfTwo(int n) {return n > 0 && (n & (n-1)) == 0;}
3 的幂
LeetCode 326:给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x
示例 1:
- 输入:n = 27
- 输出:true
示例 2:
- 输入:n = 0
- 输出:false
这道题用除法的方法就是换汤不换药。但是是否能优化一下:
输入的n是int类型,最大值是2^31 -1。不超过231-1的3的幂次方是319=1162261467。所以int范围内只要是3的幂次数,那么它一定是1162261467的除数,所以一次就可以判断。
bool isPowerOfThree(int n){return n > 0 && 1162261467 % n ==0;
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"算法通关村第十三关白银挑战——幂运算问题解析":http://eshow365.cn/6-30735-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: tcp/ip该来的还是得来
- 下一篇: 模拟select通信过程