LeetCode 276. 栅栏涂色(DP)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 DP超时解
      • 2.2 DP解

1. 题目

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

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

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

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/paint-fence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 DP超时解

  • 超时例子, 64 / 79 个通过测试用例
2 n
46340 k,时间复杂度O(nk^2)
class Solution {
public:int numWays(int n, int k) {if(n==0 || k==0)return 0;int conti = 2;//最多连续的次数vector<vector<vector<int>>> dp(n,vector<vector<int>>(k,vector<int>(conti+1,0)));//dp[i][c][conti]表示遍历完i栅栏,其颜色为c,c颜色连续了conti次的方案数int i, c, nc, ct;for(c = 0; c < k; ++c)dp[0][c][1] = 1;for(i = 1; i < n; ++i){for(c = 0; c < k; ++c){for(ct = 1; ct <= conti; ++ct)for(nc = 0; nc < k; ++nc){if(c == nc && ct+1 <= conti)dp[i][nc][ct+1] += dp[i-1][c][ct];else if(c != nc)dp[i][nc][1] += dp[i-1][c][ct];}}}int sum = 0;for(c = 0; c < k; ++c)for(ct = 1; ct <= conti; ++ct)sum += dp[n-1][c][ct];return sum;}
};

2.2 DP解

  • 前两个颜色一样,dp[i-2] 的方案数,dp[i-2]*1*(k-1),i 跟他们必须不一样(k-1种选择)
  • 前两个颜色不一样,i-2 占了一种颜色, i-1 占了一种颜色,i 还能选择 k-1 种颜色(可以跟 i-2 一样),方案数为 dp[i-1]*(k-1)
class Solution {
public:int numWays(int n, int k) {if(n==0 || k==0)return 0;vector<int> dp(n,0);//dp[i]表示遍历完i栅栏的方案数if(n>=1)dp[0] = k;if(n>=2)dp[1] = k*k;for(int i = 2; i < n; ++i){dp[i] = dp[i-1]*(k-1)+dp[i-2]*(k-1);}return dp[n-1];}
};

0 ms 6.2 MB

class Solution: # py3def numWays(self, n: int, k: int) -> int:if n==0 or k==0:return 0dp = [0]*nif n >= 1:dp[0] = kif n >= 2:dp[1] = k**2for i in range(2, n):dp[i] = (dp[i-1]+dp[i-2])*(k-1)return dp[n-1]

36 ms 13.6 MB

  • 状态可以进一步压缩成3个变量,代码略

长按或扫码关注我的公众号,一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习编程好榜样

学习编程好榜样 忠于gaming忠于down 代码分明不忘本 逻辑清晰容错强 逻辑清晰容错强 ! 学习编程好榜样 放到哪里哪里run 愿作系统的中间件 开源主义思想放光芒 开源主义思想放光芒! 学习编程好榜样 调试跟踪永不忘 注释文档是模范 开源主义品德多高尚 …

python threading setdaemon_Python中threading的join和setDaemon的区别[带例子]

python的进程和线程经常用到&#xff0c;之前一直不明白threading的join和setDaemon的区别和用法&#xff0c;今天特地研究了一下。multiprocessing中也有这两个方法&#xff0c;同样适用&#xff0c;这里以threading的join和setDaemon举例。1、join ()方法&#xff1a;主线程A…

LeetCode 1176. 健身计划评估(滑动窗口)

文章目录1. 题目2. 解题1. 题目 你的好友是一位健身爱好者。前段日子&#xff0c;他给自己制定了一份健身计划。现在想请你帮他评估一下这份计划是否合理。 他会有一份计划消耗的卡路里表&#xff0c;其中 calories[i] 给出了你的这位好友在第 i 天需要消耗的卡路里总量。 为…

为什么苹果不再需要谷歌地图?

苹果和谷歌之间的专利大战正是如火如荼&#xff0c;在这种两军对垒的时候&#xff0c;iOS设备上的那个明晃晃的谷歌地图图标就像眼中钉肉中刺一样让苹果始终不得安宁&#xff0c;让对手的核心服务扎根到自己的核心平台中&#xff0c;这感觉肯定不好。在最新版本的iPhoto中&…

java sax解析xml_【转】java使用sax解析xml文件

从下面这个url搬运。http://hck.iteye.com/blog/1175762不过程序略有改动。关于sax(搬自百科)SAX&#xff0c;全称Simple API for XML&#xff0c;既是指一种接口&#xff0c;也是指一个软件包。SAX是事件驱动型 XML解析的一个标准接口不会改变 SAX的工作原理简单地说就是…

LeetCode 422. 有效的单词方块

文章目录1. 题目2. 解题1. 题目 给你一个单词序列&#xff0c;判断其是否形成了一个有效的单词方块。 有效的单词方块是指此由单词序列组成的文字方块的 第 k 行 和 第 k 列 (0 ≤ k < max(行数, 列数)) 所显示的字符串完全相同。 注意&#xff1a; 给定的单词数大于等于…

中断处理

首先在获得PCI配置空间资源的时候&#xff0c;就要获得中断资源&#xff0c;根据CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的 Type 域来区分需要获得什么样的中断资源的时候&#xff0c;如果Type类型为&#xff1a;CmResourceTypeInterrupt&#xff0c;此时需要将中断资源从CM_PART…

java calendar计算时间差_Java Calendar 计算时间差

linux下创建文件与目录时默认被赋予了什么样的权限&quest;当我们创建一个新的文件或目录的时候,他的默认权限是什么? umask--指定当前使用者在创建文件或目录的时候默认的权限值 [rootiZ288fgkcpkZ default]# umask [roo ...x86平台转x64平台关于内联汇编不再支持的解决x8…

SVG-不是图片的图片

SVG-不是图片的图片 导语&#xff1a; 可缩放矢量图形&#xff08;Scalable Vector Graphics&#xff0c;SVG&#xff09;是基于可扩展标记语言&#xff08;XML&#xff09;&#xff0c;用于描述二维矢量图形的一种图形格式。SVG由W3C制定&#xff0c;是一个开放标准。另SVG还是…

LeetCode 1490. 克隆 N 叉树(DFS/BFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 给定一棵 N 叉树的根节点 root &#xff0c;返回该树的深拷贝&#xff08;克隆&#xff09;。 N 叉树的每个节点都包含一个值&#xff08; int &#xff09;和子节点的列表&#xff08; List[Node] &#xff09;。 class Node …

奇数阶幻方 java_N(奇数)阶幻方-java实现代码

看完最强大脑&#xff0c;有一期是说N阶幻立方的&#xff0c;作为一个程序员&#xff0c;我的第一反应时我可以用程序实现&#xff0c;在此公布N(奇数)阶幻方的java实现代码&#xff1a;package com.lzugis.test;public class Practice {public static int[][] magicOdd(int n)…

NSDateFormatter设定日期格式

部分日期格式的总结&#xff1a; NSDateFormatter * dateFormatter [[[NSDateFormatter alloc] init]autorelease]; [dateFormatter setAMSymbol:"AM"]; [dateFormatter setPMSymbol:"PM"]; [dateFormatter setDateFormat:"dd/MM/yyyy hh:mmaaa"…

LeetCode 1265. 逆序打印不可变链表(递归)

文章目录1. 题目2. 解题1. 题目 给您一个不可变的链表&#xff0c;使用下列接口逆序打印每个节点的值&#xff1a; ImmutableListNode: 描述不可变链表的接口&#xff0c;链表的头节点已给出。 您需要使用以下函数来访问此链表&#xff08;您 不能 直接访问 ImmutableListNo…

zz面试题小结

如果搞过ACM的人&#xff0c;找工作的确很好找&#xff0c;基本微软、百度之类都可以很容易拿到offer&#xff0c;我不是算法牛人&#xff0c;没搞过ACM&#xff0c;没拿过什么奖&#xff0c;没进过什么实验室&#xff0c;水平一般&#xff0c;所以更能代表大众吧。 总结一些常…

java流的传递方式是_java中数据的传递方式到底是怎样的!

今天早上我了一道有关java的题。主要考点是考java中值得传递方式。之前我在javaoo里总结的是&#xff1a;基本数据类型中保存的是实际的值,引用数据类型保存的是被引用的内存地址&#xff0c;那么基本数据类型就是按值传递&#xff0c;引用数据类型就是按地址来传递的。(难道我…

LeetCode 408. 有效单词缩写

文章目录1. 题目2. 解题1. 题目 给一个 非空 字符串 s 和一个单词缩写 abbr &#xff0c;判断这个缩写是否可以是给定单词的缩写。 字符串 “word” 的所有有效缩写为&#xff1a; ["word", "1ord", "w1rd", "wo1d", "wor1&qu…

java 钩子线程_java-钩子线程

在线上Java程序中经常遇到进程程挂掉&#xff0c;一些状态没有正确的保存下来&#xff0c;这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法&#xff0c;可以注…

LeetCode 604. 迭代压缩字符串

文章目录1. 题目2. 解题1. 题目 对于一个压缩字符串&#xff0c;设计一个数据结构&#xff0c;它支持如下两种操作&#xff1a; next 和 hasNext。 给定的压缩字符串格式为&#xff1a;每个字母后面紧跟一个正整数&#xff0c;这个整数表示该字母在解压后的字符串里连续出现的…

java郝斌_郝斌Java自学教程全集打包

课程介绍&#xff1a;1_Java概述_12_Java概述_23_Java概述_34_Java的卸载5_Java的安装6_环境变量的设置7_常见dos命令 文件名和类名不同时编译运行的问题8_变量命名规则 数据类型 运算符 格式化输出 流程控制9_复习上节课10_类和对象11_内存分配12_访问控制符_113_访问控制符_2…

LeetCode 1056. 易混淆数(哈希)

文章目录1. 题目2. 解题1. 题目 给定一个数字 N&#xff0c;当它满足以下条件的时候返回 true&#xff1a; 原数字旋转 180 以后可以得到新的数字。 如 0, 1, 6, 8, 9 旋转 180 以后&#xff0c;得到了新的数字 0, 1, 9, 8, 6 。 2, 3, 4, 5, 7 旋转 180 后&#xff0c;得到…