题目:输入一个数字 n ,对当前数字加一;减一;除以二(如果当前是偶数的话)各算一次操作, 要求把它变成m的最少操作次数。 思路:动态规划 + 递归 对于奇数: 加1 或 减1 中取步数最小的 对于偶数: 除2 停止条件: 如果 n<=1 返回 0 递归式: 奇数: 返回 min(recur(n+1),recur(n-1)) + 1 为了减少递归次数 可返回 min(recur(n+1)/2,recur(n-1)/2) + 2 偶数: 返回 recur(n/2) + 1 复杂度: 时间复杂度 O(logn) 空间复杂度 O(1)
def minOpeTime2(n):
if n <= 1:
return 0
if n % 2 == 0:
return minOpeTime(n/2) + 1
else:
return min(minOpeTime((n-1)/2), minOpeTime((n+1)/2)) + 2