解题思路:动态规划、贪心算法
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[] step = new int[m + 1];
for (int i = 0; i < m+1; i++) {
step[i] = Integer.MAX_VALUE;
}
step[n] = 0;
for (int i = n; i < m; i++) {
if(step[i] == Integer.MAX_VALUE ){
//如果是,就代表小易无法到达~
continue;
}
List<Integer> ret = div(i);//i代表当前石板的编号
for (int j: ret) {//j代表一次可以跳几块石板
if(i+j <= m && step[i+j] != Integer.MAX_VALUE){
step[i+j] = Math.min(step[i+j],step[i]+1);
}else if(i+j <= m){
step[i+j] = step[i]+1;
}
}
}
if(step[m] == Integer.MAX_VALUE){
System.out.println(-1);
}else {
System.out.println(step[m]);
}
}
public static List<Integer> div(int num){
List<Integer> list = new ArrayList<>();
for (int i = 2; i*i <= num; i++) {
if(num % i == 0){
list.add(i);
if(num/i != i){
list.add(num/i);
}
}
}
return list;
}
}
图为求解过程~