假设青蛙一次只能跳1级或者2级,一共n级台阶,请问青蛙有多少种跳法?
思路:
1级:1种
2级:2种
3级:第一步跳1级,或者第一步跳2级 f(2)+f(1)
4级:第一步跳1级,或者第一步跳2级 f(3)+f(2)
以此类推,n级 f(n-1)+f(n-2)
方法一:递归
public static int getNum(int n) { int num = 0; if(n<1) { num = 0; } else if (n>2) { num = getNum(n-1) + getNum(n-2); } else if (n==1) { num = 1; } else{ num=2; } return num; }
方法二:循环
循环这里想了很久,需要考虑用变量存储数据,如何累计这里值得深入思考。
public static int getCount(int n) { int before = 1; int sum = 0; int cur = 0; if (n < 1) { sum = 0; } if (n==1) { sum = 1; } if (n==2) { sum = 2; } if (n>2) { before = 1; sum = 2; for (int i = 2; i < n;i++) { cur = sum; sum = sum + before; before = cur; } } return sum; }
跳台阶二:假设青蛙一次能跳1-n的级数,一共n级台阶,请问青蛙有多少种跳法?
思路同上,依次写出前几个的跳法数。发现为2^n-1,但在这里,并不是一下发现这个规律。一直纠结于怎样把前面所有的结果加起来,以后要注意不能钻死胡同,变换想法,别有一番洞天。
public static int nStepCount(int n) { int sum = 1; if(n < 1) { sum = 0; } else if (n == 1) { sum = 1; } else { for (int i = 1; i < n;i++) { sum = sum*2 ; } } return sum; }
代码的确不够优雅呀,慢慢进步吧。共勉