其实就时斐波那契数列的变种
解决方式如下:
使用动态规划,这里不使用dp方程,而是使用两个指针不断地轮动,将空间复杂度降低为O(1)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()){
int n = in.nextInt();
System.out.println(rabbitCount(n));
}
}
public static int rabbitCount(int n){
// 小于3月后还是1只兔子
if (n == 1 || n == 2){
return 1;
}
// 推过递推
// n = 1 兔子数量1
// n = 2 兔子数量1
// n = 3 兔子数量2
// n = 4 兔子数量3 第一只兔子在n = 3时生了一个一只,n = 4 时小兔子还没长大,大兔子生了一个。总共4只
// n = 5 兔子数量5 第一只兔子在n = 3时生了一个一只,n = 4 时小兔子还没长大,大兔子生了一个。总共4只。n = 5时,小兔子还没长大。大兔子再生了一直
// 规律: n > 2后。f(n) = f(n-2) + f(n-1)
// 使用动态规划实现
int first = 1;
int second = 1;
for (int i = 2; i < n; i++) {
int tmp = second;
second = first + second;
first = tmp;
}
return second;
}
}



京公网安备 11010502036488号