思路
递归做法
class Solution {
public int[] numberOfDice(int n) {
int array [] = new int[5*n+1];
for(int i = n,j=0;i<=6*n;i++,j++){
array[j]=dfs(n,i);
}
return array;
}
public int dfs(int n,int s){
if(s<0)return 0;
if(n==0){
if(s==0)return 1;
else return 0;
}
int res = 0;
for(int i=1;i<=6;i++){
res += dfs(n-1,s-i);
}
return res;
}
}
结果:TLE
动态规划法
状态标示:f[i][j]标示前i次总数为j的投掷数
状态计算:f[i-1][j-k] k为最后一次投掷结果
边界:i:1~6 j:i~6i k:1~min(j,6)
for(投掷次数)
for(总数)
for(最后一次点数)
然后取出投掷i次总数为j的所有结果
for(int j = i;j<=6*i j++)f[i][j];