397. 整数替换

发布时间 2023-06-02 21:05:17作者: 乐乐章

难度中等

给定一个正整数 n ,你可以做如下操作:

  1. 如果 n 是偶数,则用 n / 2替换 n 
  2. 如果 n 是奇数,则可以用 n + 1n - 1替换 n 。

返回 n 变为 1 所需的 最小替换次数 。

 

示例 1:

输入:n = 8
输出:3
解释:8 -> 4 -> 2 -> 1

示例 2:

输入:n = 7
输出:4
解释:7 -> 8 -> 4 -> 2 -> 1
或 7 -> 6 -> 3 -> 2 -> 1

示例 3:

输入:n = 4
输出:2



class Solution:
    def integerReplacement(self, n: int) -> int:

        def backtracking(n,momo):
            if n == 1:
                momo[n] = 1
                return 1
            if n <=0:
                return 0
            
            if n%2==1:
                res = 1 + min(backtracking(n+1,momo),backtracking(n-1,momo))
            else:
                res = 1 + backtracking(n/2,momo)
            
            momo[n] = res
            return res
        momo = {}
        return backtracking(n,momo)-1