leetcode上两道判断n次方的题目
这两道题目都是判断一个数字是不是2(第一题),3(第二题)的n次方,在做第一题的时候思路基本上和标准解法想法相同,但是在做第二题的时候,看到了许多比较有创意的解法,所以记录下
判断一个数是不是2的n次方
解法一
这个解法也就是我第一次就想到的一个解法,就是做 &
运算,因为一个数字若是2的n次方,那么很明显就是这个数字的2进制肯定只会有一个1
,例如:
32=100000 ,64 =1000000。所以只需要判断 n 与 n-1 做一个&
运算就可以知道了。
1 | public boolean isPowerOfTwo(int n) { |
解法二
在Java里面。Int的最大值是2^31 - 1
到 -2^31
次,所以很明显,只需要让 n 与 2^30
次做一个 &
运算即可。
1 | public boolean isPowerOfTwo(int n) { |
判断一个数是不是3的n次方
标准解法
1 | public boolean isPowerOfThree(int n) { |
解法二
在Java里面int的最大值是2^30
,那么用3的最大值就可以是3^19
,所以解法二为:
1 | public boolean isPowerOfThree(int n) { |
解法三
由数学公式: n= 3^1,可以得到
所以会有以下代码:
1 | public boolean isPowerOfThree(int n) { |
leetcode上两道判断n次方的题目
https://somersames.github.io/2018/09/26/Leetcode上两道判断n次方的题目/