问题描述
小M有一个坏掉的计算器,它有两种功能可以操作屏幕上显示的数字:
- 将显示的数字乘以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);
}
}