(力扣)991. 坏了的计算器

在这里插入图片描述

解题思路:逆向思维

  1. 若X >= Y,则只有递减操作可以执行,返回X- Y;
  2. 若X<Y,则采用逆向思维。
  • 正向思维是需要考虑先递减1,再乘以2,难以确定是在X= Y/2、Y/4……中的什么时刻递减1。
    以小化大是困难的
  • 逆向思维可以一直除以2(Y/=2),直至Y小于X,再执行加1操作
    以大化小是容易的
  1. 使用递归结构实现,当Y>X时,每次只考虑最后一步,如果Y为偶数,则到Y的最后一步是乘2
    ,如果Y为奇数,则到Y的最后一步是减1

解题代码

class Solution {
     public static int brokenCalc(int X, int Y) {
        if(X >= Y){
            return X-Y;
        }else {
            //逆推思维
            //如果Y为偶数,则到Y的最后一步是乘2
            //如果Y为奇数,则到Y的最后一步是减1
            if(Y%2 == 0){
                return 1+brokenCalc(X,Y/2);
            }else {
                return 2+brokenCalc(X,(Y+1)/2);
            }
        }
    }
}
发布了96 篇原创文章 · 获赞 56 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/JAck_chen0309/article/details/104392746