LeetCode 790. 多米诺和托米诺平铺
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 790. 多米诺和托米诺平铺
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
LeetCode 790. 多米諾和托米諾平鋪
- 一、題目(經(jīng)典動態(tài)規(guī)劃)
- 二、解題思路
- 1. 鋪滿2*N面積:
- 2. 對于第i列,有4種情況:
- 3. N-1 -> N 轉(zhuǎn)移方程:
- 三、核心代碼
- 四、代碼中存在的一些知識性問題
- 1. 二層vector的定義、初始化
- 2. mod
- 五、代碼的最終呈現(xiàn)
一、題目(經(jīng)典動態(tài)規(guī)劃)
兩種形狀的瓷磚(一種是12的,另一種是12+11的形狀),拼2N面積,有多少種拼法(旋轉(zhuǎn)圖形算兩種不同的,不算成同一種。)
二、解題思路
1. 鋪滿2*N面積:
翻譯過來也即:
2. 對于第i列,有4種情況:
例如本題最后第N列是滿的,所以i=N的時候?qū)?yīng)狀態(tài)3。
3. N-1 -> N 轉(zhuǎn)移方程:
三、核心代碼
dp[0][3]=1; for(int i = 1;i <= n; i++) {dp[i][0] = dp[i-1][3];dp[i][1] = (dp[i-1][0]+dp[i-1][2]);dp[i][2] = (dp[i-1][0]+dp[i-1][1]);dp[i][3] = (dp[i-1][0]+dp[i-1][1]+dp[i-1][2]+dp[i-1][3]); } return dp[n][3];四、代碼中存在的一些知識性問題
1. 二層vector的定義、初始化
二層vector的定義:
vector大部分情況下會把值初始化為0:
所以在本題中, vector<vector<long long>>dp(n+1,vector<long long>(4));這一句實際上已經(jīng)把所有元素初始化成0了
2. mod
題目說返回對 10^9 + 7 取模 的值,但是標答在轉(zhuǎn)移方程中就取模了。所有的轉(zhuǎn)移都是采用的加法,所以在中間步驟取模也沒事。
五、代碼的最終呈現(xiàn)
class Solution { public:int numTilings(int n) {long long mod = 1e9 + 7;vector<vector<long long>>dp(n+1,vector<long long>(4));dp[0][3]=1;for(int i = 1;i <= n; i++){dp[i][0] = dp[i-1][3];dp[i][1] = (dp[i-1][0]+dp[i-1][2])%mod;dp[i][2] = (dp[i-1][0]+dp[i-1][1])%mod;dp[i][3] = (dp[i-1][0]+dp[i-1][1]+dp[i-1][2]+dp[i-1][3]) % mod;}return dp[n][3];}這一題摻雜了個人的很多不恰當?shù)睦斫鈕rz
總結(jié)
以上是生活随笔為你收集整理的LeetCode 790. 多米诺和托米诺平铺的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server数据表中数据的增加(
- 下一篇: 如何调用标签模板