美文网首页
数据结构&算法之--《N阶台阶的走法》

数据结构&算法之--《N阶台阶的走法》

作者: 忧郁的小码仔 | 来源:发表于2020-01-07 13:12 被阅读0次

题目大概是这样的:有N阶台阶,你可以一次走1步,也可以一次走2步,问一共有多少种走法?

这种题一开始看起来好无头绪,其实大部分都可以用大事化小,小事化了的办法解决。先来说最常用的递归的解决方法:

  1. N = 1时,只能1步走到,一共只有1种走法
  2. N = 2时,可以走两个1步走到,也可以走一个2步走到,一共有2种走法
  3. N > 2的时候,不管N是几,我们来想一下我们怎么走上最后一个台阶?答案很简单,1步走上去,或者2步走上去;这里用f(n-1)表示到第n-1个台阶的走法,f(n-2)表示到第n-2个台阶的走法,那么f(n) = f(n-1) + f(n-2)

用递归来解决很简单:

- (NSInteger)f:(NSInteger)n {
    if (n <= 2) {
        return n;
    }

    return [self f:(n-1)] + [self f:(n-2)]
}

使用递归,代码结构逻辑清晰,当然也有递归固有的缺点,维护函数调用栈,内存的开销都很大。
另外解决的办法就是使用普通的循环来解决。
循环处理的思想也和递归一样,就是f(n) = f(n - 1) + f(n - 2),不同的是我们要把从f(1)..... f(n)的每个台阶的走法累加起来。

- (NSInteger)f:(NSInteger)n {
  if (n <= 2) {
    return n;
  }

  NSInteger first = 1;         // 代表第i-2个台阶的走法,这里i初始值为3,first初始值就是第一个台阶的走法,也就是1
  NSInteger seconde = 2; // 代表第i-1个台阶的走法,同上,初始值是第2个台阶的走法,也就是2
  NSInteger sumi = 0;        // 代表到第i个台阶的所有走法

  for (NSInteger i=3; i<=n; i++) {
      sumi = first + second;
      first = second;
      second = sumi;
  }

  return sumi;
}

相关文章

  • 数据结构&算法之--《N阶台阶的走法》

    题目大概是这样的:有N阶台阶,你可以一次走1步,也可以一次走2步,问一共有多少种走法? 这种题一开始看起来好无头绪...

  • n阶台阶,一次走一阶或两阶,有多少种走法?

    递归实现. 假设有f(n)种走法, 当走到N-1阶台阶时,有f(n-1)种走法,再走一步走完。 当走到n-2阶台阶...

  • 算法小节(一)

    二分法 乘阶 递归乘阶 N台阶,1个台阶,2个台阶,一共有几种上台阶方式 冒泡 快排

  • 算法-爬楼梯问题

    一个N阶的楼梯,每次能1或着2阶,问走n阶的楼梯有多少种走法? 分析可知在走第n阶的时候,是与第n-1阶和n-2阶...

  • 上台阶问题

    楼梯有100阶台阶,上楼时可以一步上1阶,也可以一步上2阶,问共有多少种走法解析:我们现在想象自己已经站在第n级台...

  • n步台阶一次只能1步或2步

    算法-有n步台阶,一次只能上1步或2步,共有多少种走法 1、n=0 和 n=1 的时候 并没有其他可选择的,所以可...

  • Leetcode climbing stairs

    爬楼梯问题,一次只能爬1阶,或2阶。问爬n阶台阶总共有多少种爬法。 是一个fibonacci数列。1级台阶1种,2...

  • 递归算法之-爬楼梯

    一、爬楼梯算法递归实现:假设一个楼梯有N阶台阶,人每次最多跨M阶,求总共的爬楼梯的方案数例如:1-100的台阶,每...

  • 【数据结构】【C#】023-内部排序:👨‍🏫算法总结

    【C#】【数据结构】排序算法总结 动态可视化排序算法网站——SORTING 时间复杂度: (1)平方阶(O(n2)...

  • 《专注力》-读后感

    用切分,来提高专注力 有一个n阶台阶,你每次可以向上走一步,或者两步,请问一共有多少种走法刚好到达终点? 这是数学...

网友评论

      本文标题:数据结构&算法之--《N阶台阶的走法》

      本文链接:https://www.haomeiwen.com/subject/xakractx.html