把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 class Solution { public double[] dicesProbability(int n) { int [][]dp=new int[n+1][6*n+1]; for(int i=1;i<=6;i++){ dp[1][i]=1; } for(int i=2;i<=n;i++){ for(int s=i;s<=6*n;s++){ for(int j=1;j<=6;j++){ if(s-j<i-1){//s-j是减去当前点的点数,剩余的有i-1个点,最小是i-1 break; } //前i个骰子总数为s的次数等于前i-1个骰子等于s-j的次数加上第i个骰子等于j的次数 dp[i][s]+=dp[i-1][s-j];//一个累加过程 dp[3][5]=dp[3][5]+dp[2][4]+dp[2][3]+dp[2][2] } } } //前面计算了n个点得到总数为n-6n的次数,下面计算概率,掷骰子总数是6^n个结果 double total=Math.pow(6,n); double []ans=new double[5*n+1]; for(int i=n;i<=6*n;i++){ ans[i-n]=(double)dp[n][i]/total; } return ans; } }