题源 👉 统计每个月兔子的总数_牛客题霸_牛客网 (nowcoder.com)
题目描述:
思路:
简单dp问题。
兔子数量从第一个月起变化为:1 1 2 3 5 8 …,即斐波那契序列,从三项开始,每项等于前两项之和,即 F(1) = 1, F(2) = 1, F(3) = F(2)+F(1) = 2, …, F(n) = F(n-1) + F(n-2)。可通过递归或循环实现。
具体实现:
方法一:递归
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 月数
System.out.println(f(n));
}
public static int f(int n){
if(n == 1 || n == 2) return 1;
return f(n - 1) + f(n - 2);
}
}
方法二:循环
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 月数
int[] dp = new int[n + 1];
for(int i = 1; i < n + 1; i++){
if(i == 1 || i == 2) dp[i] = 1;
else dp[i] = dp[i - 1] + dp[i - 2];
}
System.out.println(dp[n]);
}
}
时间复杂度:
O(n)