【LeetCode(Java) - 276】栅栏涂色

【LeetCode(Java) - 276】栅栏涂色

文章目录

1、题目描述

2、解题思路

3、解题代码

1、题目描述

2、解题思路

??经典的动态规划问题

??定义 f[n] 表示 n 个栅栏时的总方案数。

??1、当 n 为 1 时,上色方案数为 f[1] = k;

??2、当 n 为 2 时,第 2 个栅栏的颜色可以和第 1 个一样,也可以不一样,因此总共有 f[2] = f[1] ×

k = k × k 个方案数;

??3、当 n > 3 时,给第 n 个栅栏上色时,有两种选择:

??3.1 和上一个不同颜色,那么此时第 n 个可以选的颜色有 k-1 个,截至到 n-1 的方案数为 f[n-1],于是此时的方案总数为:f[n-1] × (k-1)

??3.2 和上一个相同颜色,那么上一个就不能和上上一个同色,第 n 个可以选的颜色有 k-1 个,第 n-1 个可以选的颜色只有一个,那就是和第 n 个一样的那个,因此截至 n-1 的方案数为 f[n-2] × 1,于是此时的方案总数为:f[n-2] × 1 × (k-1);

??3.3 合计两个情况,给 n 个栅栏上色总共有 f[n] = f[n - 1] × (k - 1) + f[n - 2] × (k - 1)

3、解题代码

class Solution {

public int numWays(int n, int k) {

int[] f = new int[n+1]; // 方案数表,f[3] 表示给 3 个栅栏上色的方案数

for (int i = 1; i <= n; i++) {

if (i == 1) {

f[i] = k;

} else if (i == 2) {

f[i] = k * k;

} else {

// 第 n 个栅栏如果和上一个不同颜色,则有 f[i-1] * (k-1) 个方案数

// 第 n 个栅栏如果和上一个同颜色,那么上一个和前一个就不能同颜色,则有 f[i-2] * (k-1)

// 第 n 个栅栏上色方案数合计:f[i-1] * (k-1) + f[i-2] * (k-1)

f[i] = f[i - 1] * (k - 1) + f[i - 2] * (k - 1);

}

}

return f[n];

}

}

【LeetCode(Java) - 276】栅栏涂色相关教程

java涂色_【LeetCode(Java) - 276】栅栏涂色相关推荐

  1. Leetcode 276.栅栏涂色

    Time: 20190904 Type: Easy 考察:动态规划 题目描述 有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色. 你需要给所有栅栏柱上色,并且保 ...

  2. java 图片效果_使用Java进行图片底片化效果处理

    使用java代码读取图片,并进行底片化处理 util importjava.awt.image.BufferedImage;importjava.io.File;importjava.util.Arr ...

  3. java 分割一个_分割java

    [java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...

  4. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  5. java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)

    import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...

  6. acm用java怎么写_用java来写ACM

    前言 从去年10月份开始就一直都在九度oj平台写acm,到今天在九度oj的总排名已经到了第6名,收获很多特别是算法和数据结构方面的提高,这种提高直接反映在我找工作的顺利中 但是人总要学会拥抱变化,特别 ...

  7. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  8. java 验证码 字母_使用java生成字母验证码

    本文实例为大家分享了java生成字母验证码的具体代码,供大家参考,具体内容如下 import java.awt.BasicStroke; import java.awt.Color; import j ...

  9. java 包命名_【Java】包的命名规则

    命名规范 包:所有单词的字母小写,之后每个单词用-隔开,如 org.nemo.demo 常量:所有单词的字母大写,之后每个单词用_隔开,如 FLAG 类:所有单词的首字母大写,如 TestJava p ...

  10. java array缓存_有java数组

    [JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...

最新文章

  1. ZooKeeper客户端地址列表的随机原理
  2. Nature方法 | 三代长读长宏基因组组装软件metaFlye
  3. Pycharm无法安装第三方模块(模块已存在/换源)
  4. 使用jQuery发送POST,Ajax请求返回JSON格式数据
  5. creator图片循环显示_江淮宣传车厂家价格 图片 配置
  6. win10雷电3接口驱动_“雷电3”接口知识大科普
  7. Iterator 和 ListIterator 的区别
  8. python re模块详解_python 详解re模块
  9. Spring Cloud Alibaba —— Sentinel 详细使用
  10. 使用GNOME桌面工具管理Linux(4)–服务的使用
  11. 如何设置(样式渐变)transition
  12. SpringBoot指南(八)——SpringBoot整合Redis
  13. 【ACL2021】分享三篇值得推荐的情感分析文章 -- 风格分析、幽默计算、情感类别...
  14. java double 移位_【原创】Java移位运算
  15. VS2010闪退的问题
  16. MATLAB中前馈+反馈系统搭建-基于matlab控制系统工具箱
  17. 超好用的网站克隆工具,就是玩
  18. uVision2项目实践:HelloWorld
  19. 第一次登录域控服务器的账号,windows域登录与SSO服务器整合
  20. 一鸣心所向:数字营销中的智商、逆商和情商

热门文章

  1. 计算机五年计划个人,教师个人五年发展规划
  2. jQuery closest() 方法
  3. 计算机与经济学:天造地设的一对
  4. vba 汉字转拼音 -- wps office
  5. 昱辉阳光出售英国26MW光伏项目
  6. 画圆形图片的几种方式
  7. python中iter是什么意思_iter的用途是什么?
  8. everedit 格式化json_[原创]Everedit的试用限制绕过
  9. The CUDA compiler identification is unknown 解决
  10. 图片理解引擎算法实现简介