pub struct PascalsTriangle { rows: Vec<Vec<u32>>, }
impl PascalsTriangle { pub fn new(row_count: u32) -> Self { Self { rows: Self::create(row_count) } }
fn create(row count: u32) -> Vec<Vec<u32>> { if row_count == 0 { return Vec::new(); }
let mut result: Vec<Vec<u32>> = vec![vec![1]]; for _ in 1..row_count { let prev_row = result.last().unwrap().clone(); let mut new_row: Vec<u32> = vec![1]; let mut middle_part = prev_row .iter () .zip(prev_row.iter().skip(1)) .map (| (&a, &b) | a + b) .collect::<Vec<u32>>(); new_row.append(&mut middle_part); new_row.push(1);
result.push(new_row.clone()); } result }
pub fn rows(&self) -> Vec<Vec<u32>> { self.rows.clone() } }
|