原题如下:
剑指offer 60.骰子的点数
class Solution {
double[] yige=new double[]{1/6d,1/6d,1/6d,1/6d,1/6d,1/6d};
public double[] twoSum(int n) {
if(n==1){
return yige;
}return juanji(twoSum(n-1));
}
public double[] juanji(double[] shuzu){
int l=shuzu.length;
double[] ans=new double[l+5];
for(int i=0;i<=l+5;i++){
for(int j=0;j<6;j++){
if(i-j>=0&&i-j<l){
ans[i]+=shuzu[i-j]*(1/6d);
}
}
}return ans;
}
}
class Solution {
public double[] twoSum(int n) {
if(n==1){
return new double[]{1/6d,1/6d,1/6d,1/6d,1/6d,1/6d};
}
else{
double[] ans=new double[5*n+1];
double[] m=new double[5*n-4];
System.arraycopy(twoSum(n-1),0,m,0,5*n-4);
for(int i=0;i<=5*n;i++){
for(int j=0;j<6;j++){
if(i-j>=0&&i-j<=5*(n-1)){
ans[i]+=(1/6d)*m[i-j];
}
}
}return ans;
}
}
}
class Solution {
public double[] twoSum(int n) {
if(n==1){
return new double[]{1/6d,1/6d,1/6d,1/6d,1/6d,1/6d};
}
else{
double[] ans=new double[5*n+1];
for(int i=0;i<=5*n;i++){
for(int j=0;j<6;j++){
if(i-j>=0&&i-j<=5*(n-1)){
ans[i]+=(1/6d)*twoSum(n-1)[i-j];
}
}
}return ans;
}
}
}