坏计算器的最小操作问题

156 阅读1分钟

问题描述

小M有一个坏掉的计算器,它有两种功能可以操作屏幕上显示的数字:

  1. 将显示的数字乘以2;
  2. 将显示的数字减去1。

现在,计算器上显示的数字是 x,小M希望通过最少的操作次数,将数字变为 y

请你帮忙计算一下,最少需要多少次操作才能将数字从 x 变为 y


测试样例

样例1:

输入:x = 2,y = 3
输出:2

样例2:

输入:x = 4,y = 7
输出:2

样例3:

输入:x = 3,y = 66
输出:9

如果我们从x求y,中间的乘法和加法是比较难确定的。可以对y操作,当y大于x时,y的值肯定是从x-1或乘2来的,如果是乘以2的话这个数必定是偶数,如果不是偶数那他肯定是减1来的,我们就加上1,如果是偶数就直接除以2。循环直到y小于x,这时x就只能通过x-1得到,我们再加上他们的差值就行。

public class Main {
    public static int solution(int x, int y) {
        int res=0;
       while(y>x){
           if(y%2==0){
               y/=2;
           }else{
               y+=1;
           }
           res++;
       }
        if(y<x){
            return res+x-y;
        }
       return res;
    }

    public static void main(String[] args) {
        System.out.println(solution(2, 3) == 2 ? 1 : 0);
        System.out.println(solution(4, 7) == 2 ? 1 : 0);
        System.out.println(solution(3, 66) == 9 ? 1 : 0);
    }
}