暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

991. Broken Calculator坏了的计算器

程序媛的梦想 2020-03-20
201

给两个int数X和Y,问X最少要通过多少次减1或乘以2的操作得到Y。

思路:倒过来求,从Y到X。因为从X到Y太多的不确定,但Y到X容易。


(1) 如果Y小于X,只能自减;

(2) 如果Y大于X,且为偶数,则除以2,如果除完小于X,执行上一步。

(3) 如果Y是奇数,则肯定不能除以2,否则会出现小数了,所以Y加1(X到Y是减1,Y到X是加1),下一轮循环。


时间复杂度:O(logY),空间复杂度:O(1)。

 1/**
2 * @author lxn
3 * @description 991. Broken Calculator
4 * @create 2020-03-19 21:49
5 */

6public class Algorithm991 {
7    public static void main(String[] args) {
8        int X = 5;
9        int Y = 8;
10        int res = new Solution991().brokenCalc(X, Y);
11    }
12}
13
14class Solution991 {
15    public int brokenCalc(int X, int Y) {
16        int step = 0;
17        while (X != Y) {
18            if (Y < X) { // Y小于X,只能减1
19                step += X - Y; // 差多少就减多少次1
20                break;
21            }
22            // Y是奇数: 加1;   Y是偶数: 除以2
23            Y = Y % 2 == 1 ? Y + 1 : Y / 2;
24            step++; // 每操作一次步数加1
25        }
26
27        return step;
28    }
29}

文章转载自程序媛的梦想,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论