struct Solution; impl Solution { // return type: all situation, not crash situation pub fn new21_game(n: i32, k: i32, max_pts: i32) -> f64 { let mut mem = vec![0f64; (k + max_pts + 1) as usize]; for i in k .. k + max_pts + 1 { mem[i as usize] = if i <= n { 1f64 } else { 0f64 }; } let mut temp_ans = 0f64; if(k - 1 >= 0) { let i = k - 1; for j in 1..max_pts + 1 { temp_ans += mem[(i + j) as usize]; } mem[i as usize] = temp_ans as f64 / max_pts as f64; } for i in (0..k - 1).rev() { temp_ans += mem[(i + 1) as usize] - mem[(i + max_pts + 1) as usize]; mem[i as usize] = temp_ans as f64 / max_pts as f64; } mem[0] } } fn main() { let sl = Solution::new21_game(21, 17, 10); println!("{:?}", sl); }