在显示着数字的坏计算器上,我们可以执行以下两种操作:

  • 双倍(Double): 将显示屏上的数字乘 2
  • 递减(Decrement): 将显示屏上的数字减 1

最初,计算器显示数字 X

返回显示数字 Y 所需的最小操作数


示例 1:

输入:X = 2, Y = 3
输出:2
解释:先进行双倍运算,然后再进行递减运算 {2 -> 4 -> 3}.

示例 2:

输入:X = 5, Y = 8
输出:2
解释:先递减,再双倍 {5 -> 4 -> 8}.

示例 3:

输入:X = 3, Y = 10
输出:3
解释:先双倍,然后递减,再双倍 {3 -> 6 -> 5 -> 10}.

示例 4:

输入:X = 1024, Y = 1
输出:1023
解释:执行递减运算 1023 次

提示:

1 <= X <= 109
1 <= Y <= 109

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/broken-calculator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

由题意 X 乘2或减1之后得到 Y,我们可以反过来思考:对 Y 除2(当 Y 是偶数时)或者加1得到 X
Y 是偶数时,如果先执行 2 次加法,再执行 1 次除法操作次数较多,我们可以通过先执行 1 次除法操作,再执行 1 次加法操作以使用更少的操作次数得到相同的结果
Y 是奇数时,如果先执行 3 次加法,再执行 1 次除法操作次数较多,我们可以将其替代为顺次执行加法、除法、加法操作以使用更少的操作次数得到相同的结果

算法: 当 X 小于 Y 时,如果 Y 是奇数,我们执行加法操作,否则执行除法操作。之后(X 大于 Y),我们需要执行 X - Y 次加法操作以得到 X。

代码如下:

class Solution {public int brokenCalc(int X, int Y) {int result = 0;while (X < Y) {result++;if (Y % 2 == 1)Y++;elseY /= 2;}return result + X - Y;}
}

991. 坏了的计算器【中等】相关推荐

  1. LeetCode 991. 坏了的计算器(逆向思考)

    1. 题目 在显示着数字的坏计算器上,我们可以执行以下两种操作: 双倍(Double):将显示屏上的数字乘 2: 递减(Decrement):将显示屏上的数字减 1 . 最初,计算器显示数字 X. 返 ...

  2. 力扣 991. 坏了的计算器

    在显示着数字的坏计算器上,我们可以执行以下两种操作: 双倍(Double):将显示屏上的数字乘 2:     递减(Decrement):将显示屏上的数字减 1 . 最初,计算器显示数字 X. 返回显 ...

  3. leetcode991. 坏了的计算器(贪心)

    在显示着数字的坏计算器上,我们可以执行以下两种操作: 双倍(Double):将显示屏上的数字乘 2: 递减(Decrement):将显示屏上的数字减 1 . 最初,计算器显示数字 X. 返回显示数字 ...

  4. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  5. 贪心(Greedy Algorithm)

    贪心(Greedy Algorithm) 贪心 44.通配符匹配 45.跳跃游戏 II 55.跳跃游戏 122.买卖股票的最佳时机II 134.加油站 135.分发糖果 179.最大数 277.搜寻名 ...

  6. LeetCode 700题 题解答案集合 Python

    2019.5.12更新至题号796,目前共有265题. 2019.5.26更新至题号72, 目前共有347题. 2019.6.16更新至题号70,目前共有382题. 2019.7.7更新至题号5120 ...

  7. 学生用计算机2ndf,手机计算器2ndf键在哪 等同于INV键

    1.2ndF的全称是"second function",译为"第二功能",可以分开理解--2nd是"二"的序数词表示方法,即"se ...

  8. 华为手机计算器程序员模式_华为手机坏了需要维修时,一定记得开启这个模式,防止信息泄露!...

    阅读本文前,请您先点击上面的蓝色字体"生活妙招噻",再点击"关注",这样您就可以继续免费收到内容了.每天都有分享.完全是免费订阅,请放心关注 相信大家都能够感受 ...

  9. python strptime_Python法律实务应用——制作自己的LPR计算器(上)

    hello,大家好,我是虞元坚律师.好久不写文章,今天给大家介绍Python法律实务的一个基础应用--司法计算器的制作. 司法计算是一门律师基本功,尤其对诉讼律师来说,更是经常遇到,例如诉讼费.律师费 ...

最新文章

  1. Cell Reports:去除宿主和胞外DNA以提高微生物基因组得率(痰液样本)
  2. Spring 命名空间
  3. 卡尔曼滤波器算法(Kalman Filter)—— 数学推导,图文并茂
  4. OpenCV calcOpticalFlowPyrLK用法的实例(附完整代码)
  5. 全国汽车牌照号详解细表(各省市区)
  6. Pocket PC/Smartphone软件安装包之制作DIY
  7. 前端学习(1343):集合关联
  8. from PyQt4 import QtGui,QtCore出错-解
  9. 看完这篇Redis缓存三大问题,够你和面试官battle几回合了
  10. 浅谈UWB室内定位(一)_vortex_新浪博客
  11. JavaScript如何调用摄像头
  12. CxImage入门教程,图文并茂
  13. linux拔掉网线ip仍然在,openwrt 实现网线的拔插能够释放IP和重新分配IP地址
  14. 【AutoSAR】【MCAL】MCU模块
  15. FeedDemon--最好用的Blog阅读工具
  16. HTML+CSS零基础学习笔记(五)— 模拟淘宝首页(静态)
  17. css改变hr的默认样式
  18. 卡尔·古斯塔夫· 荣格
  19. c语言中用age表示年龄的词语,age和aged表示年龄的用法区别
  20. [nrf51] BLE DFU:Dual Bank 备份升级 OTA

热门文章

  1. html代码老是记不住怎么办,几个老爱忘记的html标签
  2. Springboot响应结果仲裁机制怎么解决?!
  3. 易中天品汉代风云人物01: 冤死的晁错(上)
  4. 【文件导出】vue中使用post文件导出
  5. 半小时玩转QT桌面系统托盘(含托盘消息)
  6. mobiscroll插件的基本使用方法
  7. C++ fmt库及Sophus库安装
  8. 蒜头君旅游(c++)
  9. 8-zookeeper算法基础(尚硅谷学习笔记)
  10. 纯css3画的奶牛动物头像代码