class Solution { public double new21Game(int N, int K, int W) { // 先判断 K + W 是否小于N,如果是的话,说明肯定能赢得游戏,返回 1.0,也就是 100% if (N >= K + W) { return 1.0; } double[] dp = new double[K + W]; // 将能赢得游戏的点数的概率设置为 1 for (int i = K; i <= N; i++) { dp[i] = 1.0; } // 计算K + W 这几个点数的概率和 double sumProb = N - K + 1; // 从 K - 1 开始计算, for (int i = K - 1; i >= 0; i--) { // 点数为 i 的赢得游戏的概率为 i + 1 ~ i + W 的概率和除以 W dp[i] = sumProb / W; sumProb = sumProb - dp[i + W] + dp[i]; } return dp[0]; } }