###### tags: `leetcode` `dynamic-programming`
# 120. Triangle
## my dead body
```python=
class Solution:
def minimumTotal(self, triangle):# List[List[int]]) -> int:
height = len(triangle)
indexTreeLeafLayer = [0]
for _ in range(height - 1):
indexTreeLeafLayer += [item + 1 for item in indexTreeLeafLayer] # a special seqeunce, should have its name
print(indexTreeLeafLayer)
theSmallers = [0] * len(triangle[-1])
print('**', theSmallers)
for layerIndex in reversed(range(height)):
triangle[layerIndex] = [a + b for a, b in zip(theSmallers, triangle[layerIndex])]
print(triangle)
lenOfThisLayerInTriangle = 2 ** layerIndex
thisLayerInTriangle = triangle[layerIndex]
print(layerIndex, "layer index")
indexTreeThisLayer = indexTreeLeafLayer[0 : lenOfThisLayerInTriangle] # the upper layer is contained in the lower layer, so the last/leaf layer has all info
theSmallers = [0] * (len(indexTreeThisLayer) // 2)
for i in range(len(indexTreeThisLayer) // 2):
# pairwise comparision
print(i*2, i*2+1, 'index Tree This Layer')
if thisLayerInTriangle[indexTreeThisLayer[i*2]] <= thisLayerInTriangle[indexTreeThisLayer[i*2+1]]:
theSmallers[i] = thisLayerInTriangle[indexTreeThisLayer[i*2]]
else:
theSmallers[i] += thisLayerInTriangle[indexTreeThisLayer[i*2+1]]
print("@@", theSmallers)
return theSmallers[0]+ triangle[0][0]
tri = [[2],[3,4],[6,5,7],[4,1,8,3]]
print('ANS', Solution().minimumTotal(tri))
```
## me, pass
```python=
class Solution:
def minimumTotal(self, triangle):# List[List[int]]) -> int:
for layerIndex in range(len(triangle) - 1, 0, -1):
layer = triangle[layerIndex]
aboveLayer = triangle[layerIndex - 1]
for i in range(len(layer) - 1):
if layer[i] <= layer[i + 1]:
aboveLayer[i] += layer[i]
else:
aboveLayer[i] += layer[i+1]
return triangle[0][0]
```
### revision, pass
```python=
class Solution:
def minimumTotal(self, triangle):# List[List[int]]) -> int:
for layerIndex in range(len(triangle) - 1, 0, -1):
layer = triangle[layerIndex]
aboveLayer = triangle[layerIndex - 1]
for i in range(len(layer) - 1):
aboveLayer[i] += min(layer[i], layer[i + 1])
return triangle[0][0]
```
### revision, pass
```python=
class Solution:
def minimumTotal(self, triangle):# List[List[int]]) -> int:
for layerIndex in range(len(triangle) - 1, 0, -1):
for i in range(layerIndex):
triangle[layerIndex - 1][i] += min(triangle[layerIndex][i], triangle[layerIndex][i + 1])
return triangle[0][0]
```