首页 > 其他 > 详细

[LeetCode] Paint Fence

时间:2015-09-05 13:44:22      阅读:609      评论:0      收藏:0      [点我收藏+]

A dynamic programming problem. This post shares a nice solution and explanation. Well, this article is simply an organization of this post and its first answer (also posted by me :-)).

I use s (same) to stand for the number of ways when the last two fences are painted with the same color (the last element of dp1 in the above post) and d (different) with d1 and d2 to stand for the last two elements of dp2 in the above post.

In each loop, dp1[i] = dp2[i - 1] turns into s = d2 and dp2[i] = (k - 1) * (dp2[i - 2] + dp2[i - 1]) becomes d2 = (k - 1) * (d1 + d2). Moreover, d1 needs to be set to the oldd2, which is recorded in s. So we have d1 = s.

Finally, the return value dp1[n - 1] + dp2[n - 1] is just s + d2.

The code is as follows.

 1 class Solution {
 2 public:
 3     int numWays(int n, int k) {
 4         if (n < 2 || !k) return n * k; 
 5         int s = k, d1 = k, d2 = k * (k - 1); 
 6         for (int i = 2; i < n; i++) {
 7             s = d2;
 8             d2 = (k - 1) * (d1 + d2);
 9             d1 = s;
10         }
11         return s + d2;
12     }
13 };

 

[LeetCode] Paint Fence

原文:http://www.cnblogs.com/jcliBlogger/p/4783051.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!