博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Paint Fence 粉刷篱笆
阅读量:5885 次
发布时间:2019-06-19

本文共 1233 字,大约阅读时间需要 4 分钟。

  

There is a fence with n posts, each post can be painted with one of the k colors.

You have to paint all the posts such that no more than two adjacent fence posts have the same color.

Return the total number of ways you can paint the fence.

Note:

n and k are non-negative integers.

 

这道题让我们粉刷篱笆,有n个部分需要刷,有k种颜色的油漆,规定了不能有超过两个的相同颜色涂的部分,问我们总共有多少种刷法。那么我们首先来分析一下,如果n=0的话,说明没有需要刷的部分,直接返回0即可,如果n为1的话,那么有几种颜色,就有几种刷法,所以应该返回k,当n=2时,k=2时,我们可以分两种情况来统计,一种是相邻部分没有相同的,一种相同部分有相同的颜色,那么对于没有相同的,对于第一个格子,我们有k种填法,对于下一个相邻的格子,由于不能相同,所以我们只有k-1种填法。而有相同部分颜色的刷法和上一个格子的不同颜色刷法相同,因为我们下一格的颜色和之前那个格子颜色刷成一样的即可,最后总共的刷法就是把不同和相同两个刷法加起来,参见代码如下:

 

解法一:

class Solution {public:    int numWays(int n, int k) {        if (n == 0) return 0;        int same = 0, diff = k;        for (int i = 2; i <= n; ++i) {            int t = diff;            diff = (same + diff) * (k - 1);            same = t;        }        return same + diff;    }};

 

下面这种解法和上面那方法几乎一样,只不过多了一个变量,参见代码如下:

 

解法二:

class Solution {public:    int numWays(int n, int k) {        if (n == 0) return 0;        int same = 0, diff = k, res = same + diff;        for (int i = 2; i <= n; ++i) {            same = diff;            diff = res * (k - 1);            res = same + diff;        }        return res;    }};

 

 

参考资料:

 

转载地址:http://fwlix.baihongyu.com/

你可能感兴趣的文章
漫游Kafka设计篇之性能优化(7)
查看>>
MVC在添加控制器的时候发现没有添加的选项了?肿么办?
查看>>
Android AndroidManifest.xml配置文件
查看>>
[原创]自定义BaseAcitivity的实现,统一activity的UI风格样式
查看>>
C# LDAP认证登录
查看>>
spark源码 hashpartitioner
查看>>
Vue文件跳转$router传参数
查看>>
gitlab简单使用教程【转】
查看>>
《荣枯鉴》闻达卷二
查看>>
Java 8 新特性-菜鸟教程 (0) -Java 8 新特性
查看>>
使用R语言的RTCGA包获取TCGA数据--转载
查看>>
Android studio 3+版本apk安装失败问题
查看>>
PostgreSQL性能极限
查看>>
从舌绛如火说开去
查看>>
Windows下安装Eric5时出现的“Sorry, please install QtHelp.”问题解决办法
查看>>
[置顶] ARM指令集和常用寄存器
查看>>
socket连接和http连接的区别
查看>>
U盘安装SLES的方法
查看>>
ANDROID (eclipse)开发常见问题及解决办法汇总
查看>>
The connection to adb is down, and a severe error has occured. 问题解决
查看>>