剑指 Offer 60. n个骰子的点数

发布时间 2023-09-11 19:12:30作者: 小星code

题目链接: 剑指 Offer 60. n个骰子的点数

题目描述:

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。

解法思路:

还未理解

代码:


// 通常做法是声明一个二维数组 dp ,dp[i][j] 代表前 i 个骰子的点数和 j 的概率,
// 并执行状态转移。而由于 dp[i] 仅由 dp[i−1] 递推得出,
// 为降低空间复杂度,只建立两个一维数组 dp , tmp 交替前进即可。

func dicesProbability(n int) []float64 {
	//初始化一个二维切片
	db := make([][]float64, n)
	//规定二维切片每一行的长度
	for i := range db {
		db[i] = make([]float64, 5*i+6)
	}
	//初始化,为二维切片第一行赋值
	for i := 0; i < 6; i++ {
		db[0][i] = 1.0 / 6.0
	}
	//开始递归,找出最终结果
	for i := 0; i < len(db)-1; i++ {
		for j := range db[i] {
			for k := 0; k < 6; k++ {
				db[i+1][j+k] += db[i][j] / 6.0
			}
		}
	}
	return db[n-1]
}