这道题是LeetCode里的第991道题。

题目描述:

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

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

最初,计算器显示数字 X

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

如果这道题你是硬算的话 (由 X 到 Y),那我得佩服你,因为直接从正面硬算的话需要考虑的条件很多原因在于有乘 2 这个操作,我们不知道什么时候乘 2 才合适。这里我使用的是逆向思维(由 Y 到 X),逻辑就简单多了,因为对于 Y 来说,它要除 2,就必须是偶数。否则递增。

通过除 2,使 Y 不断的逼近 X。对于偶数,除 2 操作,不管怎么样,肯定比递增 Y 好。

解题代码:

  1. class Solution {
  2. public int brokenCalc(int X, int Y) {
  3. if(X>Y)return X-Y;
  4. int res=0;
  5. while(X<Y){
  6. if(Y%2==1){
  7. Y++;
  8. }else{
  9. Y/=2;
  10. }
  11. res++;
  12. }
  13. return res+X-Y;
  14. }
  15. }

提交结果:

个人总结:

这道题是一道贪心题,正面计算的算法肯定有。在这里我想说的是我自己的代码,最后的返回值我的并不是 " return res+X-Y; " 而是 " return res; ",while 循环条件我的也并不是 " X<Y " 而是 " X!=Y ",还有中间的 if 判断条件,我这样改算是优化了一下代码,缩短了计算的时间。

【LeetCode】Broken Calculator(坏了的计算器)的更多相关文章

  1. [Swift]LeetCode991. 坏了的计算器 | Broken Calculator

    On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...

  2. 【LeetCode】991. Broken Calculator 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  3. 123th LeetCode Weekly Contest Broken Calculator

    On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...

  4. 【leetcode】991. Broken Calculator

    题目如下: On a broken calculator that has a number showing on its display, we can perform two operations ...

  5. 991. Broken Calculator

    On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...

  6. LC 991. Broken Calculator

    On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...

  7. A Broken Calculator 最详细的解题报告

    题目来源:A Broken Calculator 题目如下(链接有可能无法访问): A Broken Calculator Time limit : 2sec / Stack limit : 256M ...

  8. [LeetCode] Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  9. [LeetCode] Basic Calculator III 基本计算器之三

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

随机推荐

  1. hdu6118 度度熊的交易计划

    思路: 将生产和运输费用视作产出,将销售获利视作投入,计算最小费用可行流(不一定是最大流).注意片区之间的高速公路是双向边. 实现: #include <iostream> #includ ...

  2. OpenStack安装keyston 错误BError: (pymysql.err.InternalError) (1071, u‘Specified key was too long; max key length is 767 bytes‘) [SQL: u‘\nCREATE TABLE migrate_ver

    折腾了两天的错误,BError: (pymysql.err.InternalError) (1071, u‘Specified key was too long; max key length is ...

  3. iOS打包上传app store各种问题解决总结

    问题1 this action could not be completed. try again 问题2 there was an error sending data to the iTunes ...

  4. codeforce Gym 100203I I WIN (网络流)

    把'I'拆成容量为1一条边,一个入点一个出点,入点和相邻的'W'连一条容量为1的边,出点和相邻的'N'连一条容量为1,所有的'W'和源点连一条容量为1边,所有的'N'和汇点连一条容量为1的边,表示只能 ...

  5. C++类型强制转换<转>

    转载:http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.html C风格的强制类型转换(Type Cast)很简单,不管什么类型 ...

  6. rf统计条数

    js模式 直接引用关键字模式

  7. Codeforces Round #272 (Div. 2)-B. Dreamoon and WiFi

    http://codeforces.com/contest/476/problem/B B. Dreamoon and WiFi time limit per test 1 second memory ...

  8. Java简答题附答案

    1. Java有没有goto? 有, Goto语句在java中作为保留字, 并没有实现它. 带标号的break, continue局限于循环体中跳转 带标号的goto可以在一个函数(c语言)中任意跳转 ...

  9. 洛谷 p1141 01迷宫题解

    很长时间没发博客了,今天水一下 很多dalao说染色(普通的)过不了, 我怎么就过了 其实我也是今天才知道什么是染色(由@你听风在吼 dalao指导) 然后自己打了一个,也不知道叫不叫染色,反正是过了 ...

  10. 网络流的$\mathfrak{Dinic}$算法

    网络流想必大家都知道,在这不过多赘述.网络流中有一类问题是让你求最大流,关于这个问题,许多计算机学家给出了许多不同的算法,在这里--正如标题所说--我们只介绍其中的一种--\(\tt{Dinic}\) ...