題目要求:爬樓梯可以一次爬一階或者一次爬兩階,求爬n階樓梯一共有多少中爬法涛碑。
思路:算法課中老師用來(lái)舉例的DP問(wèn)題(非常經(jīng)典K拾簟6杳薄!)
DP問(wèn)題:動(dòng)態(tài)規(guī)劃問(wèn)題召噩,可以通過(guò)狀態(tài)最優(yōu)解得到全局最優(yōu)解母赵,DP問(wèn)題求解的關(guān)鍵在于找到狀態(tài)轉(zhuǎn)移方程。在爬樓梯問(wèn)題中具滴,狀態(tài)轉(zhuǎn)移方程為
dp【n】 = ?dp【n - 1】+ dp【n - 2】;
這個(gè)方程的解釋為:在爬第n-1層時(shí)凹嘲,共有dp【n - 1】種爬法,在第n-2層時(shí)构韵,共有dp【n - 2】種爬法周蹭,那么,在爬第n層時(shí)疲恢,我們就可以知道凶朗,要么最后一步爬了一層,要么最后一步爬了兩層显拳,也就是dp【n - 1】+dp【n - 2】就是第n層的爬法棚愤。
同理,如果爬樓梯有三種爬法杂数,一步爬1層遇八、一步爬2層、一步爬3層耍休,那么狀態(tài)轉(zhuǎn)移方程為:
dp【n】 =? dp【n - 1】+ dp【n - 2】+ dp【n - 3】;
代碼如下。
運(yùn)行結(jié)果為: