문제
Given two integers n and k, return all possible combinations of k numbers out of the range [1, n].
You may return the answer in any order.
예시
Example 1:
Input: n = 4, k = 2
Output:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
Example 2:
Input: n = 1, k = 1
Output: [[1]]
제약 조건
Constraints:
- 1 <= n <= 20
- 1 <= k <= n
풀이 과정
Example 1를 예시로 설명하겠다.
- start = 1, curComb = [] 를 인자로 보내는 comb를 실행한다.
- (2)번의 for문을 돈다.
- start = 2, curComb [1] 를 인자로 보내는 comb를 재귀 호출한다.
- 또 (2)번의 for문을 돈다.
- start = 3, curComb = [1, 2] 를 인자로 보내는 comb를 재귀호출한다.
- 이 때, 길이가 2 === k 에 조건을 충족하기 때문에 (1)번 코드가 실행된다.
- curComb = [1, 2] 를 result.push() 한다.
- return을 하게 되면 재귀 함수가 반환된다.
- 그 전에 호출했던 (2)번에서 i = 2, curComb = [1, 2]로 돌아오게 된다.
- curComb.pop()을 통해, curComb = [1]이 된다.
- for문을 마치고, (2)의 두번째 loop를 시작한다. 이때 i++ 되므로 i = 3이 된다.
- curComb.push를 통해 curComb = [ 1, 3 ] 이 된다.
- comb() 재귀 호출을 통해 result 값에 들어가게 된다. 반환되어 (2)로 돌아온다.
- curComb.pop()를 통해 curComb = [ 1 ] 이 된다.
- for문을 마치고, (2)의 세번째 loop를 시작한다. 이때 i++ 되므로 i= 4이 된다.
- curComb.push를 통해 curComb = [ 1, 4 ] 이 된다.
- comb() 재귀 호출을 통해 result 값에 들어가게 된다. 반환되어 (2)로 돌아온다.
- curComb.pop()를 통해 curComb = [ 1 ] 이 된다.
- for문을 마치고 return 된다. 이때, (2)의 i = 1, curComb [ 1 ] 으로 돌아온다.
- curComb.pop()이 되어 curComb = [] 이 된다.
- for문을 두번째 돈다.
- 이때 curComb.push를 통해 curComb [ 2 ] 가 된다.
- ... 이러한 과정을 연속적으로 하게 된다.
풀이 코드
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
let result = [];
//---------------------------
let comb = (start, curComb) => {
// k 길이가 되면 result에 넣는다. -- (1)
if(curComb.length === k){
result.push([...curComb]);
return;
}
// curComb에 값을 넣는다. -- (2)
for(let i = start ; i <= n ; i++){
curComb.push(i)
comb(i + 1, curComb);
curComb.pop();
}
return;
}
//---------------------------
comb(start = 1, curComb = []);
return result;
};
'leetCode' 카테고리의 다른 글
[Medium] 784. Letter Case Permutation (0) | 2022.05.19 |
---|---|
[Medium] 46. Permutations (0) | 2022.05.19 |
[Easy] 21. Merge Two Sorted Lists (0) | 2022.05.18 |
[Easy] 206. Reverse Linked List (2) | 2022.05.18 |
[Medium] 542. 01 Matrix (0) | 2022.05.17 |
Comment