校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 算法 > 动态规划算法
题目

80级楼梯,每次只能下一层,或者二层,问走法的种类的总和

解答

思路:

大部分人第一反应就是晕,正常算法解决不了

考虑中间态,看看能不能有规律

      ·设D[i]为走到第i层走法的的种类数,

      ·则有D[1] =1, D[2] = 2,即下一层有1种走法,两层有2种走法。

      ·那么下三层D[3]就是下一层和下两层走法的和

      ·归纳可得D[i] = D[i-1] + D[i-2],得到状态转移方程

代码:

int D[81] = {0}; //动态规划通常要保存子集的计算结果
int getStepSum( int n)
{
//边界条件
if( n == 1 || n ==2)
return n;
//各递归子集的退出条件
if(D[n] != 0)
return D[n];
//子集状态变更
D[n] = getStepSum(n-1) + getStepSum(n-2);
return D[n];
}

注:实际编程会发现,返回值int溢出,需要将int 改成long long,这点在面试时需要考虑到

自底向上的解法

Long long D[81] = {0}; 

Long long getStepSum( int n)
{
D[1] = 1;
D[2] = 2;
for(int i = 3; i<=n ; i++)
{
D[i] = D[i-1] + D[i-2];
}
return D[n];
}



C 0条回复 评论

帖子还没人回复快来抢沙发