昨天去销售易/仁科互动面试遇到这个笔试题,想了半天没有想到怎么做,看来真的是脑子变迟钝了。所以记录一下这个耻辱。
进入正题
其实很简单,直接上代码了。
public static int minStep(int n) {
int count = 0;
while(n!=1) {
if (n % 2 ==0) {
n = n/2;
count++;
}else
{
n=n-1;
count++;
}
}
return count;
}
逻辑就是倒推,是奇数就减1,是偶数就除2。
扩展
根据这个题,也搜到了好多题
比如 给定两个正整数n,m,每次只能对n加1或者乘2,求m变为n的最小步数
比如 给定两个正整数n,m,每次只能对n加1、减1、乘2,求m变为n的最小步数
其实道理都是差不多的。只不过要多考虑一些情况。