[LeetCode] Pascal's Triangle

아르당·2025년 9월 6일

LeetCode

목록 보기
27/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

정수 numRows가 주어졌을 때, 파스칼의 삼각형의 처음 numRows를 반환해라.
파스칼의 삼각형에서 각 숫자는 아래 보여지는 것처럼 바로 위에 있는 두 수의 합이다.

Example

#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]]

Constraints

  • 1 <= numRows <= 30

Solved

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에 추가한다.

profile
내 마음대로 코드 작성하는 세상

0개의 댓글