使用Rust语言实现帕斯卡三角

22-09-25 banq
帕斯卡三角rust源码:

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()
     }
 }