题解 | #贪吃牛# java
贪吃牛
https://www.nowcoder.com/practice/ae6261c872724fda8913b0377e85f6ab
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ public int eatGrass (int n) { // write code here // 创建一个大小为n+1的数组,用于存储不同数量草时的吃法数量 int[] dp = new int[n + 1]; dp[1] = 1; dp[2] = 2; // 使用动态规划计算吃法数量 for (int i = 3; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } // 返回n根草时的吃法数量 return dp[n]; } }
这段代码使用的编程语言是Java
该题考察的知识点是动态规划。
代码的解释如下:
- 定义了一个名为
eatGrass
的函数,它接收一个整数n
作为参数,并返回一个整数。 - 创建了一个大小为
n + 1
的vector<int>
,命名为dp
,用于存储不同数量草时的吃法数量。 - 将
dp[1]
初始化为1,表示只有1根草时的吃法数量。 - 将
dp[2]
初始化为2,表示只有2根草时的吃法数量。 - 使用循环从3到
n
,依次计算各个数量草时的吃法数量:使用状态转移方程dp[i] = dp[i - 1] + dp[i - 2],表示当前数量草的吃法数量等于前一根草的吃法数量加上前两根草的吃法数量。通过不断累加得到最终的吃法数量。 - 返回
dp[n]
,即n根草时的吃法数量作为函数的结果。
这段代码使用了动态规划的思想来解决问题,将问题分解为子问题,并利用已经计算过的子问题的结果来求解更大规模的问题。