题目链接
三步问题
题目描述
注意点
- n范围在[1, 1000000]之间
- 结果可能很大,需要对结果模1000000007
解答思路
- 动态规划的思想根据dp[i - 1]、dp[i - 2]、dp[i - 3]推出dp[i]
- 需要注意的是结果可能很大,在计算的过程中需要模1000000007防止越界
代码
class Solution {
public int waysToStep(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int[] dp = new int[n];
dp[0] = 1;
dp[1] = 2;
dp[2] = 4;
for (int i = 3; i < n; i++) {
// 先对dp[i - 2] + dp[i - 3]相加取模后再与dp[i - 1]相加取模,防止越界
dp[i] = ((dp[i - 1] + (dp[i - 2] + dp[i - 3]) % 1000000007)) % 1000000007;
}
return dp[n - 1];
}
}
关键点
- 动态规划的思想