您的位置:首页 > 其它

lintcode骰子求和

2018-03-12 00:32 501 查看

题目:

扔 n 个骰子,向上面的数字之和为 S。给定 Given n,请列出所有可能的 S 值及其相应的概率。

样例:

给定 n = 1,返回 [ [1, 0.17], [2, 0.17], [3, 0.17], [4, 0.17], [5, 0.17], [6, 0.17]]

答案:

public class Solution {
/**
* @param n an integer
* @return a list of Map.Entry<sum, probability>
*/
private TreeMap<Integer, Double> helper(TreeMap<Integer, Double> M){
TreeMap<Integer, Double> newM = new TreeMap<>();
double p = 1d/6;

for(int i = 1; i <= 6; i++)
for(int num : M.keySet()){
int key = num + i;

if(newM.containsKey(key)) newM.put(key, newM.get(key) + M.get(num)*p);

else newM.put(key, M.get(num)*(1d/6));
}

return newM;
}

public List<Map.Entry<Integer, Double>> dicesSum(int n) {
// Write your code here
// Ps. new AbstractMap.SimpleEntry<Integer, Double>(sum, pro)
// to create the pair
TreeMap<Integer, Double> M = new TreeMap<>();
double p = 1d/6;

for(int i = 1; i <= 6; i++) M.put(i, p);

for(int i = 2; i <= n; i++) M = helper(M);

List<Map.Entry<Integer, Double>> ans = new ArrayList<>();

for(Map.Entry<Integer, Double> e : M.entrySet()) ans.add(e);

return ans;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: