leetcode 397. Integer Replacement

Given a positive integer n and you can do operations as follow:

  1. If n is even, replace n with n/2.
  2. If n is odd, you can replace n with eithern + 1 or n - 1.

What is the minimum number of replacements needed for n to become 1?

Example 1:

Input:
8
Output:
3
Explanation:
8 -> 4 -> 2 -> 1

Example 2:


Input:
7
Output:
4
Explanation:
7 -> 8 -> 4 -> 2 -> 1
or
7 -> 6 -> 3 -> 2 -> 1

  • clear solution:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution(object):
def integerReplacement(self, n):
"""
:type n: int
:rtype: int
"""
d = {}
def helper(n):
if n == 1:
return 0
if n in d:
return d[n]
val = 0
if n%2 == 0:
val = 1 + helper(n/2)
else:
val = min(1+helper(n-1),1+helper(n+1))
d[n] = val
return val
return helper(n)
  • my solution:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution(object):
def integerReplacement(self, n):
"""
:type n: int
:rtype: int
"""
def helper(n):
if n == 1:
return 0
if n == 3:
return 2
val = 0
if n%2 == 0:
val = 1 + helper(n/2)
else:
val = min(1+helper(n-1),1+helper(n+1))

return val
return helper(n)

my solution recursion do not store ,slower than clear solution