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

}