讨论/题目交流/🏆 第 158 场力扣周赛/
🏆 第 158 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

分割平衡字符串
可以攻击国王的皇后
掷骰子模拟
最大相等频率

展开讨论

第三题纠结了好久,终于理解了。

class Solution:
    def dieSimulator(self, n: int, rollMax):
        MOD = 10 ** 9 + 7
        nums = [[[0 for _ in range(16)] for _ in range(6)] for _ in range(n)]
        for i in range(6):
            nums[0][i][1] = 1
        for i in range(1,n): # 第i次掷骰子,0-start
            for j in range(6): # 第i次掷出j点,j=0~5表示1-6点
                for k in range(6): # 第i-1掷出k点,k=0~5表示1-6点
                    if j!=k: # 若i次与i-1次点数不同,无需考虑重复问题,因为每个数字至少可连续出现一次(rollMax>=1)
                        nums[i][j][1] += sum(nums[i-1][k]) % MOD # 对第i-1次掷出k点的情况,无论是连续的第几次,都求和;此处暗含两次求和,一个是数组第三维由sum()求和,另一个是随着k的循环,不断累加得出nums[i][j][1]的值
                    else:
                        for m in range(2,rollMax[j-1]+1): # 若k与j相同,即当前点数与上一次点数相同,则需考察连续次数小于rollMax[j-1]的情况;在第i次连续掷出j点m次的序列数等于在第i-1次连续掷出j点m-1次的序列数量。
                            nums[i][j][m] = nums[i-1][j][m-1]
        ans = [0,0,0,0,0,0]
        for j in range(6):
            ans[j] = sum(nums[-1][j]) % MOD
        return sum(ans) % MOD
2
展开全部 14 讨论