991. 坏了的计算器-逆向解题法
在显示着数字 startValue 的坏计算器上,我们可以执行以下两种操作:
双倍(Double):将显示屏上的数字乘 2;
递减(Decrement):将显示屏上的数字减 1 。
给定两个整数 startValue 和 target 。返回显示数字 target 所需的最小操作数。
示例 1:
输入:startValue = 2, target = 3
输出:2
解释:先进行双倍运算,然后再进行递减运算 {2 -> 4 -> 3}.
示例 2:
输入:startValue = 5, target = 8
输出:2
解释:先递减,再双倍 {5 -> 4 -> 8}.
示例 3:
输入:startValue = 3, target = 10
输出:3
解释:先双倍,然后递减,再双倍 {3 -> 6 -> 5 -> 10}.
对于这一题,我希望大家有这样一个认识,首先如果target是偶数,那么它一定是startValue x 2得到的,如果它是奇数,那么它一定是startValue 减一得到的,基于这个规则,我们就可以得到我们的反向解题思路,解题代码如下:
int brokenCalc(int startValue, int target){
int count=0;
while(startValue<target){
count++;
if(target%2==0){
target=target/2;
}
else{
target++;
}
}
return count+startValue-target;
}