description

Given an integer numRows, return the first numRows of Pascal's triangle.

In Pascal's triangle, each number is the sum of the two numbers directly above it as shown:

 

Example 1:

Input: numRows = 5
Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

Example 2:

Input: numRows = 1
Output: [[1]]

 

Constraints:

  • 1 <= numRows <= 30

submission

impl Solution {
    pub fn generate(num_rows: i32) -> Vec<Vec<i32>> {
        // successors trick is so cool
        std::iter::successors(Some(vec![1]), |prev| Some(
            std::iter::once(1)
                .chain(prev.windows(2).map(|w| w.iter().sum()))
                .chain(std::iter::once(1))
                .collect()
        ))
        // infinite iterator above, we took n
        .take(num_rows as usize)
        .collect()
    }
}