Leetcode 2998. Minimum Number of Operations to Make X and Y Equal

  • [Leetcode 2998. Minimum Number of Operations to Make X and Y Equal](#Leetcode 2998. Minimum Number of Operations to Make X and Y Equal)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题就是一个比较简单的动态规划的题目了。

显然,如果x小于y,那么要使之变成y,就只能通过不断加一的方式获得,我们可以直接给出答案。

而如果x大于y,那么,要使之变成y,我们就需要在以下5种情况当中选择最小值:

  1. 直接通过减一变成y
  2. 先将其减为第一个能被5整除的数,然后整除5之后进行迭代;
  3. 先将其加到第一个能被5整除的数,然后整除5之后进行迭代;
  4. 先将其减为第一个能被11整除的数,然后整除11之后进行迭代;
  5. 先将其加到第一个能被11整除的数,然后整除11之后进行迭代;

此时,我们通过一个动态规划的算法就能快速实现了。

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def minimumOperationsToMakeEqual(self, x: int, y: int) -> int:
        
        @lru_cache(None)
        def dp(x):
            if x <= y:
                return y-x

            r5, r11 = x % 5, x % 11
            ans = min(
                1 + r5 + dp((x-r5) // 5), 
                1 + 5-r5 + dp((x+5-r5) // 5), 
                1 + r11 + dp((x-r11) // 11), 
                1 + 11-r11 + dp((x+11-r11) // 11), 
                x-y
            )
            return ans

        ans = dp(x)
        return ans

提交代码评测得到:耗时32ms,占用内存17.4MB。

相关推荐
dyxal19 小时前
动态规划:给“最优解”一张记住过去的备忘录
算法·动态规划·代理模式
长安er20 小时前
LeetCode198打家劫舍:从回溯到动态规划的优化历程
算法·leetcode·动态规划·回溯·打家劫舍
scx2013100420 小时前
20251210 DP小测总结
c++·动态规划
李玮豪Jimmy2 天前
Day39:动态规划part12(115.不同的子序列、583.两个字符串的删除操作、72.编辑距离)
算法·动态规划
添加shujuqudong1如果未回复2 天前
三相逆变器VOC矢量控制电力电子Matlab仿真simulink之旅
动态规划
Learner__Q3 天前
每天五分钟:动态规划-LeetCode高频题_day2
算法·leetcode·动态规划
李玮豪Jimmy3 天前
Day37:动态规划part10(300.最长递增子序列、674.最长连续递增序列 、718.最长重复子数组)
算法·动态规划
_OP_CHEN4 天前
【算法基础篇】(三十三)动态规划之区间 DP:从回文串到石子合并,吃透区间类问题的万能解法
c++·算法·蓝桥杯·动态规划·算法竞赛·acm/icpc·区间动态规划
roman_日积跬步-终至千里4 天前
【计算机设计与算法-习题2】动态规划应用:矩阵乘法与钢条切割问题
算法·矩阵·动态规划
少许极端4 天前
算法奇妙屋(十八)-子数组系列(动态规划)
算法·动态规划·子数组