3、坏了的计算器(Weekly Contest 123)

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

双倍(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 <= 10^9
1 <= Y <= 10^9
这道题一开始打算使用递归的,但是没成功,哎
但是我想到了既然X到Y是-1 2,因为2是随时可以的,那么可以转换成/2 和+1,因为/2不是随时可以的,并且/2是正确的方向,如果x=3,y=7,那么肯定是先+1然后除以2然后再除以2然后加一,但是自己当时没往深了想,以为也是一样复杂的,哎
代码如下:

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

知道了思路就很简单,如果不知道思路就会很复杂,而且还弄不出来,哎

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/86928155
123