当前位置: 首页剑指offer刷题第七期问题详情 【动态规划专题】剑指 Offer 60. n个骰子的点数 本问题对应课程链接:剑指offer刷题第七期 要求: 1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。 2、给出你代码所用的时间复杂度和空间复杂度
共以下 5 个回答
dp解法
解题思路
– dp[n][j] ,n表示是第几个骰子。j表示总点数。这个题目允许存在空间浪费。n肯定比n-1的j的范围要大。比如dp[1]的j的范围是1~6,dp[2]的j的范围是2~12
– dp[n][j] 和dp[n-1][n-1的j]的关系?j的构成要考虑dp[n]点数是1,2,3,4,5,6时和dp[n-1]不同j的组合。
【题解1】
时间复杂度:O(n ^2)
f(n,x)=i=1∑6f(n−1,x−i)×1/6
时间复杂度O(N^2),空间复杂度O(N)。
//n个骰子的结果需要用到n-1个骰子的结果,进行递推
double[] dp = new double[6];
Arrays.fill(dp, 1.0 / 6.0);
for (int i = 2; i <= num; i++) {
double[] tmp = new double[5 * i + 1];
for (int j = 0; j < dp.length; j++) {
for (int k = 0; k < 6; k++) {
tmp[j + k] += dp[j] / 6.0;
}
}
dp = tmp;
}
return dp;