반응형
문제
문제해결방법
- all combinations 조합 = 대부분의 경우, 재귀함수 DFS
- 반드시 ( 가 open한 다음 ) close 해야함 (조건에 맞는 조합만=백트래킹 알고리즘)
- if(open<length)
- if(close<open)
- n의 두배가 되면 끝 base case
시간복잡도: O((2^n) / 2), 공간복잡도: O((2^n) / 2)
https://github.com/eunhanlee/leetcode_22.GenerateParentheses/blob/master/README.md
import java.util.ArrayList;
import java.util.List;
/**
* 주어진 n쌍의 괄호에서 올바른 괄호 조합을 모두 생성하는 클래스입니다.
*/
public class Solution {
/**
* 올바른 괄호 조합을 모두 생성합니다.
*
* @param n 괄호 쌍의 수
* @return 올바른 괄호 조합의 리스트
*/
public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<>();
backtrack(result, "", 0, 0, n);
return result;
}
/**
* 재귀적으로 올바른 괄호 조합을 모두 생성합니다.
*
* @param result 생성된 괄호 조합들의 리스트
* @param currentString 현재까지 생성된 문자열
* @param open 현재까지 열린 괄호의 수
* @param close 현재까지 닫힌 괄호의 수
* @param len 괄호 쌍의 수
*/
private void backtrack(List<String> result, String currentString, int open, int close, int len) {
if (currentString.length() == len * 2) {
result.add(currentString);
return;
}
if (open < len) {
backtrack(result, currentString + "(", open + 1, close, len);
}
if (close < open) {
backtrack(result, currentString + ")", open, close + 1, len);
}
}
}
설명
- 모든 컴비네이션은 2^n이고, 이는 백트래킹 알고리즘으로 절반이 삭제됨. (2^n) / 2
- 이를 정리하면 O(4^n/sqrt(n)) 와 같음.
반응형
'old > Algorithm Solving' 카테고리의 다른 글
118. Pascal's Triangle 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.08 |
---|---|
48. Rotate Image 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.06 |
94. Binary Tree Inorder Traversal문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.03 |
Powerfull Integer 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.05.01 |
find number 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.04.30 |