Leetcode - Paint House
Leetcode - Paint Fence

Leetcode - Paint House II

violet posted @ May 06, 2020 06:55:01 AM in 算法 with tags Algorithm Golang DP , 182 阅读

https://leetcode.com/problems/paint-house-ii/

There are a row of n houses, each house can be painted with one of the k colors. The cost of painting each house with a certain color is different. You have to paint all the houses such that no two adjacent houses have the same color.

The cost of painting each house with a certain color is represented by a n x k cost matrix. For example, costs[0][0] is the cost of painting house 0 with color 0; costs[1][2] is the cost of painting house 1 with color 2, and so on... Find the minimum cost to paint all houses.

Note:
All costs are positive integers.

Example:

Input: [[1,5,3],[2,9,4]]
Output: 5
Explanation: Paint house 0 into color 0, paint house 1 into color 2. Minimum cost: 1 + 4 = 5; 
             Or paint house 0 into color 2, paint house 1 into color 0. Minimum cost: 3 + 2 = 5. 

 

func minCostII(costs [][]int) int {
    if len(costs) == 0{
        return 0
    }
    n := len(costs)
    k := len(costs[0])
    dp := make([][]int, n)
    for i := 0; i < len(dp); i++ {
        dp[i] = make([]int, k)
    }
    for i := 0; i < k; i++ {
        dp[0][i] = costs[0][i]
    }
    for i := 1; i < n; i++ {
        for j := 0; j < k; j++ {
            dp[i][j] = costs[i][j] + getOther(dp[i-1], j)
        }
    }
    return min(dp[n-1])
}

func getOther(nums []int, idx int) int {
    minOther := math.MaxInt32
    for i, n := range nums {
        if i != idx && minOther > n {
            minOther = n
        }
    }
    return minOther
}

func min(nums []int) int {
    minNum := nums[0]
    for _, n := range nums {
        if n < minNum {
            minNum = n
        }
    }
    return minNum
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter