剑指offer_编程题_变态跳台阶

  • 题目
    一只青蛙一次可以跳上1级台阶,
    也可以跳上2级……它也可以跳上n级。
    求该青蛙跳上一个n级的台阶总共有多少种跳法。
    
  1. 青蛙可以跳任意级台阶
    若青蛙要跳上第n级台阶,可以从任意i(i<n)级台阶跳至第n级
    即 f(n) = f(n-1) + f(n-2) + … + f(1) + f(0)
    class Solution {
    public:
        int jumpFloorII(int number) {
     	   if(number == 0)
     		   return 1;
     	   int countjump = 0;
     	   while(number>0)
     	   {
     		   countjump += jumpFloorII(number-1);
     		   number--;
     	   }
     	   return countjump;
        }
    };
    
  2. 对于任意i(i<n)级台阶,递归计算需要对i级台阶重复计算
    可以对已经计算出的前i级台阶跳法保存,进而获得第n级台阶的跳法
    class Solution {
    public:
        int jumpFloorII(int number) {
     	   int N=0;
     	   std::vector<int> restemp;
     	   restemp.push_back(1);
     	   while(N<number)
     	   {
     		   int sumtemp = 0;
     		   for (int i = 0; i < restemp.size(); ++i)
     		   {
     			   sumtemp += restemp.at(i);
     		   }
     		   restemp.push_back(sumtemp);
     		   N++;
     	   }
     	   return restemp.back();
        }
    };
    
  3. 对于第i级台阶的跳法f(i),f(i) = f(i-1) + … + f(1) + f(0)
    那么有 f(i+1) = f(i) + f(i-1) + … + f(1) + f(0) = 2 * f(i)
    f(1) = 1,f(i) = 1 * 2(i-1)
    #include <math.h>
    class Solution {
    public:
        int jumpFloorII(int number) {
     	   return pow(2,number-1);
        }
    };
    
发布了80 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/C_abua/article/details/105662675