class Solution:
def minDays(self, n: int) -> int:
dp = {}
def dfs(n):
if n == 0:
return 0
if n in dp:
return dp[n]
res = 1 + dfs(n - 1)
if n % 3 == 0:
res = min(res, 1 + dfs(n // 3))
if n % 2 == 0:
res = min(res, 1 + dfs(n // 2))
dp[n] = res
return res
return dfs(n)class Solution:
def minDays(self, n: int) -> int:
dp = {0: 0, 1: 1}
def dfs(n):
if n in dp:
return dp[n]
res = 1 + (n % 2) + dfs(n // 2)
res = min(res, 1 + (n % 3) + dfs(n // 3))
dp[n] = res
return res
return dfs(n)class Solution:
def minDays(self, n: int) -> int:
q = deque([n])
visit = set()
res = 0
while q:
res += 1
for _ in range(len(q)):
node = q.popleft()
nei = node - 1
if nei == 0:
return res
if nei not in visit:
visit.add(nei)
q.append(nei)
for d in range(2, 4):
if node % d == 0:
nei = node // d
if nei == 0:
return res
if nei not in visit:
visit.add(nei)
q.append(nei)
return res