赞
踩
在数轴上有一个起点和一个终点,第一步跳1,第二步跳2,第三步跳3,… 但是可以左右跳,最后问最少跳几步
例子: 0 ——> 2: 0 -> 1 -> -1 -> 2
import math #二进制进行暴力破解 def brute(n): k = 1 # 遍历跳 1,2,3,4,5...次 while True: # 生成每一次的每一条的步数列表 base = list(range(1, k + 1)) # 生成每一跳的左右遍历的二进制数字 for i in range(2 ** k): dist = 0 # 获取每一位的数值计算最后跳跃坐标 for j in range(k): # i & (1 << j) 将i第j号位上的数值进行保留其余归0,可以用来判断该位是否为0 coef = 1 if i & (1 << j) else -1 dist += base[j] * coef if dist == n: return k k += 1 def math_method(n): # 求根 k = math.ceil((math.sqrt(8 * n + 1) - 1) / 2) # 求差值 r = k * (k + 1) // 2 - n # 差值要是2的倍数 if r % 2: if k % 2: return k + 2 else: return k + 1 else: return k if __name__ == '__main__': for i in range(1, 20): print(i, math_method(i), brute(i))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。