算法-有n步台阶,一次只能上1步或2步,共有多少种走法
2018-01-31 15:29
393 查看
前言:
其实这个题目挺简单的,可以分分钟看懂,但是分析过程非常经典,故记录下来以后复习。
2、n>=2时情况就变复杂起来,但是这个时候可以操作的步骤也就2种
也就是走1步(n-1)与走2步(n-2)。所以可以得到f(n)=f(n-1)+f(n-2);
从当前状态转为下一状态的通用算法既可。
3、 验证,使用2以上的数字验证几次。
优点:可能是最好理解的算法了把。代码简单,好理解。
缺点:计算次数颇多,有很多冗余计算。
优点: 基本没有冗余计算,效率高
缺点: 谁能一次读完就理解的?
1. 一个问题可以通过更小子问题的解决方法来解决(译者注:即问题的最优解 包含了其子问题的最优解,也就是最优子结构性质)。
2. 有些子问题的解可能需要计算多次(译者注:也就是子问题重叠性质)。
3. 子问题的解存储在一张表格里,这样每个子问题只用计算一次。
4. 需要额外的空间以节省时间。
虽然没弄懂为啥叫动态规划,但是代码还是很清晰的。
优点:已经计算过的结果就不需要再次计算了。空间换时间
缺点:需要额外的开销。
其实这个题目挺简单的,可以分分钟看懂,但是分析过程非常经典,故记录下来以后复习。
分析
1、n=0 和 n=1 的时候 并没有其他可选择的,所以可以得出f(0)=0;f(1)=1;2、n>=2时情况就变复杂起来,但是这个时候可以操作的步骤也就2种
也就是走1步(n-1)与走2步(n-2)。所以可以得到f(n)=f(n-1)+f(n-2);
从当前状态转为下一状态的通用算法既可。
3、 验证,使用2以上的数字验证几次。
实现
实现算法往往是简单的,及时是复杂算法也花费不了太多精力,所以将问题转换为数学问题是一种很好的选择。当前这种简单算法实现方式更为简单,而且往往不止一种方式。递归
public static int f(int n){ if(n<=2) return n; int x = f(n-1)+f(n-2); return x; }
优点:可能是最好理解的算法了把。代码简单,好理解。
缺点:计算次数颇多,有很多冗余计算。
迭代
public static int f(int n){ if(n<=2) return n; if first=1,second=2; int third=0; for(int i=3;i<=n;i++){ third = first+second; first = second; second = third; } return third; }
优点: 基本没有冗余计算,效率高
缺点: 谁能一次读完就理解的?
动态规划
原文:动态规划是解决下面这些性质类问题的技术:1. 一个问题可以通过更小子问题的解决方法来解决(译者注:即问题的最优解 包含了其子问题的最优解,也就是最优子结构性质)。
2. 有些子问题的解可能需要计算多次(译者注:也就是子问题重叠性质)。
3. 子问题的解存储在一张表格里,这样每个子问题只用计算一次。
4. 需要额外的空间以节省时间。
public static int[] A = new int[100]; public static int f(int n){ if(n<=2){ A = n; } if(A >0){ return A ; } else { A = f(n-1)+f(n-2); return A ; } }
虽然没弄懂为啥叫动态规划,但是代码还是很清晰的。
优点:已经计算过的结果就不需要再次计算了。空间换时间
缺点:需要额外的开销。
相关文章推荐
- 超级台阶 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法? 注:规定从一级到一
- 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度。
- 【算法题】题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度
- 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度
- 楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上两阶,编写算法计算共有多少种不同的上楼梯的方法。
- 有n个台阶,如果一次只能上1个或2个台阶,求一共有多少种上法
- 一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度。
- 跳台阶问题:一个台阶共有N级,如果一次可以跳1级,也可跳2级,求总共有多少种跳法
- 有1000阶的台阶,一个人每次只能走一阶或两阶,用一个递归算法求出共有多少种走法。
- 有n个台阶,如果一次只能上1个或2个台阶,求一共有多少种上法
- 一只青蛙一次只能跳一阶或两阶台阶,总共要跳n阶,求总共有多少总跳法
- [算法]n阶台阶,一次走一步或两步,有多少种走法?
- (算法题)一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 //求总共有多少总跳法,并分析算法的时间复杂度
- 【面试题】N级台阶(比如100级),每次可走1步或者2步,求总共有多少种走法?
- 每天学习一算法系列(25)(一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度。)
- 【微软100题】一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度
- N级台阶(比如100级),每次可走1步或者2步,求总共有多少种走法?
- 有1000阶的台阶,一个人每次只能走一阶或两阶,用一个递归算法求出共有多少种走法。
- 一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法,并分析算法的时间复杂度。