Python描述 LeetCode 剑指 Offer II 091. 粉刷房子

Posted 亓官劼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python描述 LeetCode 剑指 Offer II 091. 粉刷房子相关的知识,希望对你有一定的参考价值。

Python描述 LeetCode 剑指 Offer II 091. 粉刷房子

  大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~

  如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.


本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。

题目

假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。

当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。

例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。

请计算出粉刷完所有房子最少的花费成本。

示例 1:

输入: costs = [[17,2,17],[16,16,5],[14,3,19]]
输出: 10
解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。
     最少花费: 2 + 5 + 3 = 10。

示例 2:

输入: costs = [[7,6,2]]
输出: 2

提示:

  • costs.length == n
  • costs[i].length == 3
  • 1 <= n <= 100
  • 1 <= costs[i][j] <= 20

注意:本题与主站 256 题相同:https://leetcode-cn.com/problems/paint-house/

Python描述

动态规划。

dp[i][j]表示0~i个房子且i-1第i个房子使用j颜色的最低花费
则dp[i][j] = min(dp[i-1][(j-1)%3] , dp[i-1][(j+1)%3]) + costs[i][j]
class Solution:
    def minCost(self, costs: List[List[int]]) -> int:
        n = len(costs)
        dp = [[2**32 for j in range(3)] for i in range(n)]
        for i in range(3):
            dp[0][i] = costs[0][i]
        for i in range(1,n):
            for j in range(3):
                dp[i][j] = min(dp[i-1][(j-1)%3] , dp[i-1][(j+1)%3]) + costs[i][j]
        return min(dp[n-1])
        

以上是关于Python描述 LeetCode 剑指 Offer II 091. 粉刷房子的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode50. Pow(x, n)

Python描述 LeetCode 剑指 Offer II 091. 粉刷房子

Python描述 LeetCode 剑指 Offer II 091. 粉刷房子

Python描述 LeetCode 剑指 Offer II 091. 粉刷房子

C++&Python描述 LeetCode C++&Python描述 LeetCode 剑指 Offer 22. 链表中倒数第k个节点

Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈