https://leetcode.com/problems/unique-paths/description/
* 완탐
class Solution {
public:
int uniquePaths(int m, int n, int i = 0, int j = 0) {
if(i >= m || j >= n) return 0; // reached out of bounds - invalid
if(i == m-1 && j == n-1) return 1; // reached the destination - valid solution
return uniquePaths(m, n, i+1, j) + uniquePaths(m, n, i, j+1); // try both down and right
}
};
* 재귀 dp
class Solution {
public:
int dp[101][101]{};
int uniquePaths(int m, int n, int i = 0, int j = 0) {
if(i >= m || j >= n) return 0;
if(i == m-1 && j == n-1) return 1;
if(dp[i][j]) return dp[i][j];
return dp[i][j] = uniquePaths(m, n, i+1, j) + uniquePaths(m, n, i, j+1);
}
};
*표 dp
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int>(n, 1));
for(int i = 1; i < m; i++)
for(int j = 1; j < n; j++)
dp[i][j] = dp[i-1][j] + dp[i][j-1]; // sum of unique paths ending at adjacent top and left cells
return dp[m-1][n-1]; // return unique paths ending at cell (m-1, n-1)
}
};
* 표 dp && 공간최적화
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> dp(n, 1);
for(int i = 1; i < m; i++)
for(int j = 1; j < n; j++)
dp[j] += dp[j-1];
return dp[n-1];
}
};
'Algorithm > dp' 카테고리의 다른 글
[알고리즘] 리트코드 45. 점프 게임 II c++ // dp, 그리디 bfs (0) | 2024.07.01 |
---|---|
[알고리즘] 리트코드 최대하위배열 c++ // dp (0) | 2024.07.01 |
리트코드 338. Counting Bits c++ // 1의갯수세기, dp, 비트 (0) | 2024.05.21 |
리트코드 322 코인변경 c++ // 동전dp복습, 리트코드 초기화주의 (0) | 2024.05.19 |
리트코드 주식을사고파는가장좋은시기 c++ // 이분탐색(슬라이딩윈도)+그리디, dp (0) | 2024.05.18 |