Recursion
class Solution(object):
def integerReplacement(self, n):
"""
:type n: int
:rtype: int
"""
if n==1: return 0
if n%2==0: return self.integerReplacement(n/2)+1
return min(self.integerReplacement(n+1), self.integerReplacement(n-1))+1
DP
Memory Limit Exceeded
class Solution(object):
def integerReplacement(self, n):
"""
:type n: int
:rtype: int
"""
dp = [None]*(n+1)
dp[1] = 0
for i in range(2, n+1):
if i%2==0:
dp[i] = dp[i/2]+1;
else:
dp[i] = min(dp[i-1], dp[(i+1)/2]+1)+1
return dp[n]
with mem
class Solution(object):
def integerReplacement(self, n):
"""
:type n: int
:rtype: int
"""
mem = {1:0}
return self.helper(n, mem)
def helper(self, n, mem):
if n in mem:
return mem[n]
if n%2:
res = min(self.helper(n+1, mem), self.helper(n-1, mem)) + 1
else:
res = self.helper(n/2, mem) + 1
mem[n] = res
return res