问题描述

两个数AB,其中A<B。只能对A进行两种操作:A=A+1A=A*2,求AB的最少操作次数。

解决思路

先判断符号位是否相等,如果不等,就一直A=A+1。然后判断二进制长度是否相等,如果不等,表明数值相差较大,可以尝试A=A*2。如果长度相等,表明数值非常接近,直接B-A

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function minStep(A, B) {
let step = 0
let bA = A.toString(2)
const bB = B.toString(2)

while (bA[0] !== bB[0]) {
step += 1
A = A + 1
bA = A.toString(2)
}
while (bA.length !== bB.length) {
step += 1
A = A << 1
bA = A.toString(2)
}

return B - A + step
}