Leetcode #276: 栅栏涂色 [动态规划]

这篇博客详细介绍了LeetCode第276题的解决方案,通过动态规划的方法来处理栅栏涂色问题。作者创建了一个2k*n的二维数组,用于记录相邻栅栏的颜色状态,并最终计算所有可能的涂色组合。
摘要由CSDN通过智能技术生成

题目

有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色。

你需要给所有栅栏柱上色,并且保证其中相邻的栅栏柱 最多连续两个 颜色相同。然后,返回所有有效涂色的方案数。

注意:
n 和 k 均为非负的整数。

示例:

输入: n = 3,k = 2
输出: 6
解析: 用 c1 表示颜色 1,c2 表示颜色 2,所有可能的涂色方案有:

            柱 1    柱 2   柱 3     
 -----      -----  -----  -----       
   1         c1     c1     c2 
   2         c1     c2     c1 
   3         c1     c2     c2 
   4         c2     c1     c1  
   5         c2     c1     c2
   6         c2     c2     c1

题解

Easy难度,我的思路是构建一个2k*n的二维数组(颜色x栅栏),每个颜色占两行,第一行储存上一个是其他颜色的栅栏,第一行储存上一个是同样颜色的栅栏,最后把所有可能相加即可

	颜	| 1 | 1 | 2 |
	色	| 0 | 1 | 1 |
		| 1 | 1 | 2 |
		| 0 | 1 | 1 |
		| 栅 | 栏 | 数 |
class Solution {
   
    public int numWays(int n, int k) {
   
        if(n==0 || k==0) return 0;
        if(n>2 && k==1) retu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值