문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수 numRows가 주어졌을 때, 파스칼의 삼각형의 처음 numRows를 반환해라.
파스칼의 삼각형에서 각 숫자는 아래 보여지는 것처럼 바로 위에 있는 두 수의 합이다.

#1
Input: numsRows = 5
Output: [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
#2
Input: numRows = 1
Output: [[1]]
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
result.add(firstRow);
if(numRows == 1) return result;
for(int i = 1; i < numRows; i++){
List<Integer> preRow = result.get(i - 1);
List<Integer> curRow = new ArrayList<>();
curRow.add(1);
for(int j = 1; j < i; j++){
curRow.add(preRow.get(j - 1) + preRow.get(j));
}
curRow.add(1);
result.add(curRow);
}
return result;
}
}
반환할 result와 첫번째 row가 될 firstRow를 생성한다. 그리고 firstRow에 1을 추가하고, result에 추가한다.
만약 numRows가 1이면 result를 반환한다.
그렇지 않다면 for문을 통해 1부터 numRows까지 반복한다. 이때 1부터 순환하는 이유는 이미 firstRow를 추가했기 때문에 다시 할 필요가 없기 때문이다.
반복문 안에서 이전 row를 가져올 preRow와 현재 row를 완성할 curRow를 생성하고, 이전 row인 result.get(i - 1)를 preRow에 할당한다.
curRow에 1을 추가하고, 반복문을 통해 1부터 i까지 반복한다. 이때, curRow에 preRow.get(j - 1) + preRow.get(j)를 추가한다.
그리고 curRow의 마지막에 1을 추가하고, curRow를 result에 추가한다.