본문 바로가기
LeetCode/Array & Hashing

[LeetCode][Kotlin] 118. Pascal's Triangle

by jinwo_o 2024. 8. 13.

118. Pascal's Triangle

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:

정수 numRows가 주어지면 Pascal의 삼각형의 첫 번째 numRows를 반환합니다.

Pascal의 삼각형에서 각 숫자는 표시된 대로 바로 위에 있는 두 숫자의 합입니다.

 

 

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

코드 1

  • 파스칼 삼각형의 첫 번째 행은 [1] 이다.
  • 두 번째 numRow 부터는 이전 numRow 의 크기 + 1 만큼의 크기를 가진다.
  • 이전 numRow 의 인접한 두 요소를 더하여 현재 행의 요소를 계산한다. 계산을 편하게 하기 위해 양 끝에 [0] 을 추가한다.
class Solution {
    fun generate(numRows: Int): List<List<Int>> {
        val answer = mutableListOf(listOf(1))
        
        for (i in 1 until numRows) {
            val row = mutableListOf<Int>()
            val temp = listOf(0) + answer[i - 1] + listOf(0)
            for (j in 0..i) {
                row.add(temp[j] + temp[j + 1])
            }
            answer.add(row)
        }
        
        return answer
    }
}

 

코드 2

  • numRow 는 행 번호만큼의 크기를 가진다.
  • 세 번째 numRow 부터는 양 끝을 제외한 나머지 부분을 이전 numRow 의 인접한 두 요소를 더하여 현재 행의 요소를 계산한다.
class Solution {
    fun generate(numRows: Int): List<List<Int>> {
        val answer = mutableListOf<List<Int>>()

        for (i in 0 until numRows) {
            val row = MutableList(i + 1) { 1 }
            if (i > 1) {
                for (j in 1 until i) {
                    row[j] = answer[i - 1][j - 1] + answer[i - 1][j]
                }
            }
            answer.add(row)
        }
        
        return answer
    }
}