leetcode 동적 기획
### leetcode 120 O(n**2), O(n) ###
###
class Solution:
def minimumTotal(self, triangle):
f=triangle[-1] # f
row = len(triangle)
for i in range(row-2,-1,-1):
for j in range(len(triangle[i])):
f[j] = min(f[j],f[j+1])+triangle[i][j]
return f[0]
leetcode53 최대 하위 시퀀스 및 [E]
### leetcode53 [E] O(n), O(1)###
class Solution:
def maxSubArray(self, nums):
f = nums[0]
maxsubarray=f
for x in nums[1:]:
f1 = max(f+x,x) # >0 , ;
f = f1
if f1>maxsubarray:
maxsubarray = f1
return maxsubarray
leetcode62 다른 경로[M]
### leetcode62 O(m*n) O(m*n) ###
class Solution:
def uniquePaths(self, m, n):
f = [[1 for _ in range(n)] for _ in range(m)] # f , 1,
for i in range(1,m):
for j in range(1,n):
f[i][j] = f[i-1][j]+f[i][j-1] # (1,1) ,
return f[-1][-1]
leetcode64 최소 경로 및 [M]
### leetcode64 O(m*n) O(n) ###
class Solution:
def minPathSum(self, grid):
m = len(grid)
n = len(grid[0])
f = [grid[0][0]]*n
for j in range(1,n):
f[j] = f[j-1]+grid[0][j]
for i in range(1,m):
for j in range(n):
if j==0:
f[j] += grid[i][j]
else:
f[j] = min(f[j],f[j-1])+grid[i][j]
return f[-1]
leetcode63 다른 경로 II[M]
### leetcode63 II O(m*n) O(1) ###
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid):
m = len(obstacleGrid)
n = len(obstacleGrid[0])
if obstacleGrid[0][0]==1: # , 0
return 0
else:
obstacleGrid[0][0] = 1
for j in range(1,n): # , , 0,
if obstacleGrid[0][j]==1:
obstacleGrid[0][j]=0
else:
obstacleGrid[0][j] = obstacleGrid[0][j-1]
for i in range(1,m): # , , 0,
if obstacleGrid[i][0]==1:
obstacleGrid[i][0]=0
else:
obstacleGrid[i][0] = obstacleGrid[i-1][0]
for i in range(1,m): # (1,1) , , 0,
for j in range(1,n):
if obstacleGrid[i][j] == 1:
obstacleGrid[i][j] = 0
else:
obstacleGrid[i][j] = obstacleGrid[i-1][j]+obstacleGrid[i][j-1]
return obstacleGrid[-1][-1]
leetcode91 디코딩 방법[M]
### leetcode91 O(n), O(n)( O(1))###
class Solution:
def numDecodings(self, s):
n = len(s)
if s[0] < '1': # 0, 0
return 0
else:
f = [1] * n # f
for i in range(1, n):
if i == 1: # 2 , 0, 0, 1-26 , 0, 1
if s[i] == '0':
if s[i - 1:i + 1] <= '26' and s[i - 1:i + 1] >= '1':
f[i] = 1
else:
return 0
else: # 0, 1-26 , 2, 1
if s[0:2] > '26':
f[i] = 1
else:
f[i] = 2
else: # , 0
if s[i] == '0': # 0, , 1-26 , f[i-2], 0
if s[i - 1:i + 1] <= '26' and s[i - 1:i + 1] >= '1':
f[i] = f[i - 2]
else:
return 0
else: # 0, , 1-26 , f[i-2], f[i-2]+f[i-1]
if s[i - 1:i + 1] > '26' or s[i - 1] == '0':
f[i] = f[i - 1]
else:
f[i] = f[i - 1] + f[i - 2]
return f[-1]
leetcode139 단어 분할[M]
### leetcode139 O(n**2) O(n) ###
class Solution:
def wordBreak(self, s, wordDict):
n = len(s)
f = [False]*(n+1) # f[i] s[:i]
f[0] = True
for i in range(1,n+1):
for j in range(0,i):
if f[j] and s[j:i] in wordDict: # j i-1 s[j:i] ,f[i] True
f[i] = True
return f[-1]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0부터 시작하는 LeetCode Day8 「1302. Deepest Leaves Sum」해외에서는 엔지니어의 면접에 있어서 코딩 테스트라고 하는 것이 행해지는 것 같고, 많은 경우, 특정의 함수나 클래스를 주제에 따라 실장한다고 하는 것이 메인이다. 빠른 이야기가 본고장에서도 행해지고 있는 것 같은 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.