在减一操作时注意是否越界
import java.util.*;
public class Main {
static int N=100010;
static int n,k;
static boolean[] st=new boolean[N];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
k=sc.nextInt();
Queue<Integer> queue=new LinkedList<>();
queue.offer(n);
st[n]=true;
int tmp=0;
while (!queue.isEmpty()){
int size=queue.size();
while (size-->0){
int curr=queue.poll();
if (curr==k){
System.out.println(tmp);
return;
}
if (curr+1<N&&!st[curr+1]){
queue.offer(curr+1);
st[curr+1]=true;
}
if (curr-1<N&&curr-1>=0&&!st[curr-1]){
queue.offer(curr-1);
st[curr-1]=true;
}
if (curr*2<N&&!st[curr*2]){
queue.offer(curr*2);
st[curr*2]=true;
}
}
tmp++;
}
}
}