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。

相关推荐
xuanjiong1 天前
纯个人整理,蓝桥杯使用的算法模板day2(0-1背包问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个
算法·蓝桥杯·动态规划
好好学习^按时吃饭1 天前
[NOIP 1999 提高组] 导弹拦截
动态规划
绵绵细雨中的乡音2 天前
动态规划-第六篇
算法·动态规划
程序员黄同学2 天前
动态规划,如何应用动态规划解决实际问题?
算法·动态规划
脑子慢且灵2 天前
蓝桥杯冲刺:一维前缀和
算法·leetcode·职场和发展·蓝桥杯·动态规划·一维前缀和
小王努力学编程2 天前
动态规划学习——回文子串系列问题【C++】
c++·学习·算法·leetcode·动态规划
Espresso Macchiato2 天前
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays
leetcode·动态规划·leetcode hard·leetcode 3500·leetcode双周赛153
工一木子2 天前
大厂算法面试 7 天冲刺:第5天- 递归与动态规划深度解析 - 高频面试算法 & Java 实战
算法·面试·动态规划
pen-ai3 天前
【NLP】15. NLP推理方法详解 --- 动态规划:序列标注,语法解析,共同指代
人工智能·自然语言处理·动态规划
烁3473 天前
每日一题(小白)动态规划篇2
算法·动态规划