网易2017 跳石板问题

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;


public class TiaoShiBan {
   public static List<Integer> getDivisor(int number){
  List<Integer> divisor = new LinkedList<Integer>();
  for(int i = 2; i <= Math.sqrt(number); i++){
  if(number % i == 0){
  divisor.add((int) i);
  if(number /i != i ){
  divisor.add(number / i);
  }
  }
  }
  return divisor;
   } 
   public static void main(String[] args){
  Scanner in = new Scanner(System.in);
  while(in.hasNext()){
  int start = in.nextInt();
  int end = in.nextInt();
  int[] seq = new int[end + 1];
  seq[start] = 1;
  for(int i = start ; i < end + 1;i++){
  if(seq[i] > 0){
  List<Integer> divisor = getDivisor(i);
  for(int j = 0; j < divisor.size(); j++){
  if((i + divisor.get(j)) > end){
  continue;
  }
  //当其为零,或者值大于步数
  if(seq[i + divisor.get(j)] == 0 || seq[i + divisor.get(j)] > seq[i] + 1 ){
  seq[i + divisor.get(j)] = seq[i] + 1;
  }
  }
  }
  }
  if(seq[end] == 0){
  System.out.println(-1);
  }else{
  System.out.println(seq[end] - 1);
  }
  }
   }

}

约数求解时,复杂度太高不能过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值