반응형
문제
문제해결방법
- 가능한 케이스
if startpos or endpos, add end
else currpos = lastList[prevpos+currpost]
- 필요한것= 전단계 리스트, 전단계 리스트 길이 or 현재 길이
- 조심해야 할것, list에서 add()는 기본적으로 shallow copy임.
- 즉, 모든 리스트를 돌면서 첫번째와 마지막은 무조건 1을 넣고, 아니라면 전에 넣은 리스트를 참고삼아 더해서 현재리스트에 넣으면 파스칼의 삼각형이 나온다.
시간복잡도: O(n), 공간복잡도: O(n)
https://github.com/eunhanlee/leetcode_118PascalsTriangle
import java.util.*;
class Solution {
/**
* 입력된 숫자만큼의 층까지 파스칼의 삼각형을 생성합니다.
*
* @param numRows 생성할 삼각형의 층 수
* @return 삼각형의 각 층을 나타내는 리스트들을 담은 리스트
*/
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>(); // 파스칼의 삼각형을 담을 리스트
List<Integer> currList = null; // 현재 층의 리스트
List<Integer> prevList = null; // 이전 층의 리스트
for (int i = 0; i < numRows; i++) { // 각 층에 대해 반복문 실행
currList = new ArrayList<>(); // 현재 층의 리스트 생성
for (int j = 0; j < (i + 1); j++) { // 현재 층의 각 요소에 대해 반복문 실행
if (j == 0 || j == i) currList.add(1); // 첫 번째와 마지막 요소는 항상 1
else {
// 이전 층에서 현재 요소를 생성하기 위한 계산
currList.add(prevList.get(j - 1) + prevList.get(j));
}
}
prevList = currList; // 이전 층의 리스트를 현재 층의 리스트로 설정
result.add(currList); // 현재 층의 리스트를 결과 리스트에 추가
}
return result; // 생성된 파스칼의 삼각형 반환
}
}
설명
- list를 미리 선언 해서 한다면, 아래와 같이 딥카피를 해서 해야 함.
// prevList.clear();
// prevList.addAll(currList);
// result.add(List.copyOf(currList));
// currList.clear();
반응형
'old > Algorithm Solving' 카테고리의 다른 글
LeetCode 169. Majority Element 문제 풀이 (0) | 2023.05.18 |
---|---|
136. Single Number 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.09 |
48. Rotate Image 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.06 |
22. Generate Parentheses 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.04 |
94. Binary Tree Inorder Traversal문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.03 |