📅  最后修改于: 2023-12-03 15:39:14.204000             🧑  作者: Mango
这道题目要求将一个数N表示为两个正整数|x|的正好K次幂之和。
由于题目要求|x|是2的K次幂, 所以可以先尝试将N表示为2的K次幂的形式, 即 $N=2^k$ 。
判断N是否是2的K次幂,若是,则返回1和N-1 ;否则,就需要从小到大枚举x,判断N-x是否是2的K次幂。如果存在满足要求的x,则返回x和N-x,否则返回无解。
def power_of_two(k):
return 2 ** k
def is_power_of_two(num):
return num != 0 and (num & (num - 1)) == 0
def representation_of_two_power(num, k):
if is_power_of_two(num):
return 1, num - 1
for i in range(1, num):
if power_of_two(k) - i == num:
return i, power_of_two(k) - i
return -1, -1
该方法的时间复杂度为$O(N)$,空间复杂度为$O(1)$。
print(representation_of_two_power(60, 6))
输出结果:(4, 56)。
print(representation_of_two_power(35, 5))
输出结果:(2, 33)。
print(representation_of_two_power(16, 4))
输出结果:(-1, -1)。