解题思路:逆向思维
- 若X >= Y,则只有递减操作可以执行,返回X- Y;
- 若X<Y,则采用逆向思维。
- 正向思维是需要考虑先递减1,再乘以2,难以确定是在X= Y/2、Y/4……中的什么时刻递减1。
以小化大是困难的 - 逆向思维可以一直除以2(Y/=2),直至Y小于X,再执行加1操作
以大化小是容易的
- 使用递归结构实现,当Y>X时,每次只考虑最后一步,如果Y为偶数,则到Y的最后一步是乘2
,如果Y为奇数,则到Y的最后一步是减1
解题代码
class Solution {
public static int brokenCalc(int X, int Y) {
if(X >= Y){
return X-Y;
}else {
//逆推思维
//如果Y为偶数,则到Y的最后一步是乘2
//如果Y为奇数,则到Y的最后一步是减1
if(Y%2 == 0){
return 1+brokenCalc(X,Y/2);
}else {
return 2+brokenCalc(X,(Y+1)/2);
}
}
}
}