leetcode(리트코드)62-Unique Paths
leetcode(리트코드)62-Unique Paths
leetcode 62 - Unique Paths 문제입니다.
1. 문제
https://leetcode.com/problems/unique-paths/
2. Input , Output
3. 분류 및 난이도
Medium 난이도 문제입니다.
leetcode Top 100 Liked 문제입니다.
4. 문제 해석
- MAP의 길이가 주어집니다. MAP의 끝에 도달하는 경우의 수를 리턴합니다.
- 옛날 수학시간에 배운 길찾기 (위에서 오는 경우의 수 + 왼쪽에서 오는 경우의 수)를 통해 풀었습니다.
5. code
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
v = []
for i in range(m) :
v.append([])
for j in range(n) :
v[i].append([])
for i in range(m):
for j in range(n):
if i == 0 or j ==0 :
v[i][j] = 1
else :
v[i][j] = v[i-1][j] + v[i][j-1]
return v[m-1][n-1]
c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public:
void cal(int m,int n,int** map)
{
for(int x =1;x < m ;++x)
{
for(int y = 1; y<n;++y)
{
map[x][y] = map[x-1][y] + map[x][y-1];
}
}
}
int uniquePaths(int m, int n) {
int** map = new int*[m];
for(int i =0;i<m;++i)
map[i] = new int[n];
for(int i=0;i<m;++i)
{
for(int j =0;j<n;++j)
{
map[i][j]=1;
}
}
cal(m,n,map);
int result = map[m-1][n-1];
for(int i =0;i<m;++i)
{
delete []map[i];
}
delete[] map;
return result;
}
};
6. 결과 및 후기, 개선점
c++ 100%
python100% 12ms code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def __init__(self):
self.dp = {}
def uniquePaths(self, m: int, n: int) -> int:
#이미 돌았으면 값을 리턴
if (m, n) in self.dp:
return self.dp[(m, n)]
if m == 1 or n == 1:
return 1
#재귀문
ans = self.uniquePaths(m, n-1) + self.uniquePaths(m-1, n)
self.dp[(m, n)] = ans
return ans
This post is licensed under CC BY 4.0 by the author.