Leetcode Python - 63. Unique Paths II
Leetcode #63 - Unique Paths II
이번에는 특정 챕터별로 문제들을 풀어보겠습니다. matrix을 집중적으로 풀어보겠습니다.
리트코드의 문제 63 ‘Unique Paths II’을 파이썬으로 풀어 보도록 하겠습니다.
포인트는 첫 row와 첫 column을 세팅해주고 (장애물을 만나면 그 뒤의 값들은 방문 할 수 없으므로) 그 이후 나머지 row와 column에 대해 계산을 진행해 나가면 됩니다.
전체 코드는 아래와 같습니다.
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid):
m = len(obstacleGrid)
n = len(obstacleGrid[0])
if obstacleGrid[-1][-1]:
return 0
# initial setting - column
for i in range(n):
if obstacleGrid[0][i]:
for k in range(i,n):
obstacleGrid[0][k] = 0
break
else:
obstacleGrid[0][i] = 1
# initial setting - row
for i in range(1,m):
if obstacleGrid[i][0] or not obstacleGrid[0][0]:
for k in range(i, m):
obstacleGrid[k][0] = 0
break
else:
obstacleGrid[i][0] = 1
if m == 1 or n ==1 :
return obstacleGrid[-1][-1]
# actual calculate
for i in range(1, m):
for j in range(1, n):
if obstacleGrid[i][j]:
obstacleGrid[i][j] = 0
else:
obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1]
return obstacleGrid[-1][-1]
시간복잡도는
- O(m*n) : 모든 element를 방문
공간복잡도는
- O(1) : on place