题目在这:https://leetcode-cn.com/problems/power-of-four/题目分析:
昨天2 的幂,今天4的幂。题目不多说了~按照昨天的思路直接开撸。
法一:
经过不断的测试,得到以下一条规律:
能被一百整除 ,并且相差的位数为偶数,并且其中1的个数只有一个.
elif (int(x)%100 == 0 and (len(x)-3)%2 == 0 and x.count('1') == 1)or n == 1:
这个方法比较不通用,只能是不断的试错然后加条件。
完整代码
n = 20
x = "{:b}".format(n)
if n<=0:
print(False)
# 能被一百整除 ,并且差的位数为偶数,并且其中1的个数只有一个.
elif (int(x)%100 == 0 and (len(x)-3)%2 == 0 and x.count('1') == 1)or n == 1:
print(True)
else:
print(False)
法二:
思路分析:
16 = 4 * 4
64 = 4 * 4 * 4
也就是说,如果这个传进来的数N为4的X次幂,则N不断除以4最后可以得到1。
可以设计算法: n//44 == n。
如:15 // 4 = 3 但 3 * 4 = 12 不等于15 所以15没法由4的X次幂得来。
而 100 // 4 = 25 且25 * 4 =100 但 25 // 4 =6 而 64 = 24 不等于25
所以 传进来的这个数N在不断除4 再乘4的过程有一次不符合该算法都不行。
于是得到代码:
if n <= 0 :
return False
while True:
if n == 1:
return True
elif n//4*4 != n :
return False
n /= 4
注:
python 里 ‘//’ 运算符 取整 ‘/’ 运算符精确除法,带小数。