Leetcode Java Unique Paths
업데이트:
문제
코드
class Solution {
public int uniquePaths(int m, int n) {
return this.recursiveUniquePaths(m - 1, n - 1, new int[n][m]);
}
private int recursiveUniquePaths(int m, int n, int[][] path) {
if (m == 0 || n == 0) {
return 1;
} else if (path[n][m] > 0) {
return path[n][m];
} else {
return path[n][m] = this.recursiveUniquePaths(m - 1, n, path) + this.recursiveUniquePaths(m, n - 1, path);
}
}
}
결과
설명
-
주어진 정수 m는 2차원 배열의 세로, n은 가로 축으로 맨 처음 열과 행에서 출발하여 맨 마지막 열과 행에 도달하기 까지의 경우의 수를 구하는 문제이다.
-
재귀 호출을 호출할 때 각 위치에 도달하기 까지의 경우의 수를 저장하는 배열 path를 선언하여, 해당 위치의 경우의 수를 저장하고 다른 위치에서의 경우의 수를 측정할 때 활용한다.
-
재귀 호출을 통해 최종 위치의 값이 지정되면 해당 위치의 값을 주어진 문제의 결과로 반환한다.
- m이 0이거나 n이 0인 경우, 1을 반환하여 경우의 수를 추가한다.
- path[n][m]이 0보다 큰 경우, 해당 위치의 경우의 수가 존재하기 때문에 해당 값을 그대로 반환한다.
- 그 외의 경우 path[n, $m - 1$] 위치의 경우의 수와 path[$n - 1$, m]의 위치의 경우의 수를 재귀호출로 가져와 합쳐 path[n][m] 위치의 경우의 수로 넣는다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기