其实就时斐波那契数列的变种
解决方式如下:
使用动态规划,这里不使用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; } }