https://leetcode.com/problems/01-matrix/
재귀함수 중급 문제인데 너무 오래걸렸다.
막상 짜고 보면 별거 없었는데....
class Solution(object):
def findzero(self, r, c):
if self.mat[r][c] == 0:
self.distanceMap[r][c] = 0
return self.distanceMap[r][c] + 1
if self.distanceMap[r][c] != 10000:
return self.distanceMap[r][c] + 1
self.distanceMap[r][c] = 10001
if(c > 0):
target_r = r
target_c = c-1
if self.distanceMap[target_r][target_c] != 10001:
findDistance = self.findzero(target_r, target_c)
if self.distanceMap[r][c] > findDistance:
self.distanceMap[r][c] = findDistance
if(c < self.len_c - 1):
target_r = r
target_c = c+1
if self.distanceMap[target_r][target_c] != 10001:
findDistance = self.findzero(target_r, target_c)
if self.distanceMap[r][c] > findDistance:
self.distanceMap[r][c] = findDistance
if(r > 0):
target_r = r-1
target_c = c
if self.distanceMap[target_r][target_c] != 10001:
findDistance = self.findzero(target_r, target_c)
if self.distanceMap[r][c] > findDistance:
self.distanceMap[r][c] = findDistance
if(r < self.len_r - 1):
target_r = r+1
target_c = c
if self.distanceMap[target_r][target_c] != 10001:
findDistance = self.findzero(target_r, target_c)
if self.distanceMap[r][c] > findDistance:
self.distanceMap[r][c] = findDistance
return self.distanceMap[r][c] + 1
def updateMatrix(self, matrix):
self.len_r = len(matrix)
self.len_c = len(matrix[0])
self.distanceMap = [[10000 for k in range(self.len_c)] for l in range(self.len_r)]
self.mat = matrix
for i in range(self.len_r):
for j in range(self.len_c):
self.distanceMap[i][j] = 10000
self.findzero(i, j)
return self.distanceMap
"""
:type matrix: List[List[int]]
:rtype: List[List[int]]
"""
'Algorithm > LeetCode 문제 풀이' 카테고리의 다른 글
[LeetCode 485] python - 예외 처리에 주의하기.. (0) | 2019.04.02 |
---|---|
[LeetCode 283] python 리스트(큐/스택) 이용하기 (0) | 2019.04.02 |
[LeetCode 232, 283, 290 - 완료, 485, 492] python (0) | 2019.03.31 |
[LeetCode 232. Implement Queue using Stacks] [python] 3. 스택을 이용하여 큐를 구현하기 (0) | 2019.03.30 |
[LeetCode 200 Number of Islands] [python] 2. 파이썬 문법에 익숙해지고 있다. (0) | 2019.03.30 |