跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
class Solution { public: int jumpFloor(int number) { if(number == 1) return 1; if(number == 2) return 2; int n1 = 1; int n2 = 2; int rtn = 0; for(int i = 3; i <= number; i++) { rtn = n1 + n2; n1 = n2; n2 = rtn; } return rtn; } };
变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
class Solution { public: /*分析: num = 1,rtn[1] = 1; num = 2,rtn[2] = 2; num = 3,rtn[3] = rtn[1] + rtn[2] + 1 = 4; num = 4,rtn[4] = rtn[1] + rtn[2] + rtn[3] + 1 = 8; num = n,rtn[n] = rtn[1] + rtn[2] + ... + rtn[n-1] + 1 = 2^(n-1) */ int jumpFloorII(int number) { return pow(2, number -1); } };
矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?。
/*Analysis: 最后竖着放一个时,之前的方法是f[n-1] 最后横着放两个是,之前的方法是f[n-2] so f[n] = f[n-1] + f[n-2]; */ int rectCover(int number) { if(number == 1) return 1; if(number == 2) return 2; int n1 = 1; int n2 = 2; int rtn = 0; for(int i = 3; i <= number; i++) { rtn = n1 + n2; n1 = n2; n2 = rtn; } return rtn; }
时间: 2024-11-03 22:02:34