Я пытаюсь решить проблему Paint House на LeetCode.Вот мое попытанное решение:
import math
class Solution(object):
def minCost(self, costs):
"""
:type costs: List[List[int]]
:rtype: int
"""
if not costs:
return 0
if len(costs) == 1:
return min(costs[0])
return min(costs[0][color] + self.minCost(
[exclude(costs[1], color), *costs[2:]])
for color in range(3))
def exclude(arr, color):
new_arr = arr.copy()
new_arr[color] = math.inf
return new_arr
По сути, в каждом доме он учитывает стоимость выбора каждого цвета для этого дома и исключает этот выбор для следующего дома (устанавливая стоимость в бесконечность).Я считаю, что это должно быть линейное время, потому что рекурсивные вызовы выполняются до конца массива costs
.
Я ошибаюсь?Имеет ли решение правильную временную сложность, но оно работает немного медленнее, чем ограничение, установленное LeetCode?