面试题60
示例 1:
输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
示例 2:
输入: 2
输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]限制:
Solutions
Last updated
示例 1:
输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
示例 2:
输入: 2
输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]Last updated
class Solution {
public:
vector<double> twoSum(int n) {
vector<int> dp(n * 6 + 1, 0);
for (int i = 1; i <= 6; i++)
dp[i] = 1;
for (int i = 2; i <= n; i++) {
// traverse backwards to avoid overwrite data in dp table of the last time
for (int sum = i * 6; sum >= i; sum--) {
// Caution, must use a temporal varaible
int cnt = 0;
for (int cur = 1; cur <= 6; cur++) {
int prev = sum - cur;
if (prev < i - 1 || prev > (i - 1) * 6)
continue;
cnt += dp[prev];
}
dp[sum] = cnt;
}
}
vector<double> res;
double base = pow(1.0 / 6, n);
for (int sum = n; sum <= n * 6; sum++)
res.push_back(dp[sum] * base);
return res;
}
};