(LeetCode) 118. Pascal's Triangle

118. Pascal’s Triangle

  • Explore : Interview > Top Interveiw Questions > Easy Collection
  • 분류 : Others
  • 난이도 : Easy

Problem

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

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

Example 2

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

Constraints

  • 1 <= numRows <= 30

Solution

Exapnder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
fun generate(numRows: Int): List<List<Int>> {
if (numRows == 1) {
return listOf(listOf(1))
}

var result = mutableListOf(listOf(1))
for (i in 1 until numRows) {
result.add(
listOf(1)
.plus(result.last().zipWithNext { a: Int, b: Int -> a + b })
.plus(listOf(1))
)
}
return result
}
}

Point of Thinking

  • 최초에 1만 들어가있는 리스트를 생성해준 뒤 아래 행으로 가면서 전 행의 양쪽 값을 계속 더해나가면 된다.
  • 파스칼의 삼각형은 양쪽 끝 값이 항상 1이므로 내부만 계산해준 뒤, 끝은 1만 붙여주면 Accpeted.
  • plus()는 늘 짜릿하다. zipWithNext()는 Pair외에 처음 써보는 듯