Re: [闲聊] 每日LeetCode

楼主: z2147483648 (溢伤了喇)   2023-10-24 00:45:08
: 342.Power of Four
: 检查数字n是不是4的x次方倍
: 如果n=4^x则回传true,否则回传false
: 题:1 答:true
: 题:5 答:false
: 题:16答:true
想法:
4的级数: 4^0 = 1 [0000 0001]
4^1 = 4 [0000 0100]
4^2 = 16[0001 0000]
检查bits是不是只有出现一个1-bit
并且在'奇数位'
[方法1] 利用循环检查32-bits
========== Python Code
class Solution:
def isPowerOfFour(self, n: int) -> bool:
has_one = False
for idx in range(32):
digit = n & 1
if (digit == 1):
if not has_one:
has_one = True
elif has_one:
return False
if (idx % 2 != 0):
return False
n = n >> 1
if not has_one:
return False
return True
========== C++ Code
class Solution {
public:
bool isPowerOfFour(int n) {
int count = 0;
for (int i = 0; i < 32; ++i)
{
if ((n & (1 << i)) == (1 << i))
{
if (i % 2 == 1) return false;
count++;
if (count > 1) return false;
}
}
if (count == 0) return false;
return true;
}
};
: Follow up: 不用递回或循环完成题目
想不到,偷看解答,发现有mask的方法
class Solution {
public:
bool isPowerOfFour(int n) {
int mask = 0b01010101010101010101010101010101;
if (n <= 0) return false;
if ((n == (n & mask)) && ((n & (n-1)) == 0)) return true;
return false;
}
};
作者: Che31128 (justjoke)   2023-10-24 00:47:00
用mask:0
楼主: z2147483648 (溢伤了喇)   2023-10-24 00:50:00
抄来的qwq

Links booklink

Contact Us: admin [ a t ] ucptt.com