class Solution:
def integerReplacement(self, n: int) -> int:
dp = [n] * (n+2) #0号不用,i从1到n,多出一个n+1防止计算i+1时越界
dp[1] = 0
dp[2] = 1
for i in range(3, n+1):
if i % 2:
dp[i] = min(dp[i-1], dp[i+1]) + 1
else:
dp[i] = dp[i//2] + 1
if 2*i < n+2: #每轮把2*i也算出来
dp[2*i] = dp[i] + 1
return dp[n]
class Solution:
# @functools.lru_cache
def integerReplacement(self, n: int) -> int:
if n == 1: #递归出口
return 0
if n % 2 == 0:
return 1 + self.integerReplacement(n // 2)
else:
return 1 + min(self.integerReplacement(n+1), self.integerReplacement(n-1))