假设你正在爬楼梯。需要 n 阶你才能到达楼顶
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了假设你正在爬楼梯。需要 n 阶你才能到达楼顶相关的知识,希望对你有一定的参考价值。
参考技术A 示例 1:示例 2:
刚看到这里有点懵,不知道怎么解决,所以就根据题意自己列了一个台阶数对应的方法,写出来之后会发现第n阶台阶的方法数等于 第n-1阶台阶的方法数 加上 第n-2阶台阶的方法数,所以这里就简单了
爬楼梯
题目地址: https://leetcode-cn.com/problems/climbing-stairs/ 题目说明: 假设你正在爬楼梯,需要n阶你才能到达楼顶.每次你可以爬1或2个台阶,你有多少种不同的方法可以爬到楼顶. 注意事项:给定n是一个正整数 题目事例: 输入:2 输出:2 解释:有两种方法可以爬到楼顶. 1.1阶+1阶 2.2阶
方法一:使用斐波那契额数列,时间复杂度是O(n^2)
public class Solution { // 爬梯转化为非波那且数列,最笨的递归 public int climbStairs(int n) { return (n <= 2) ? n : climbStairs(n-1) + climbStairs(n-2); } }
方法二:使用含有备忘录形式的斐波那契数列,时间复杂度是O(n)
// 使用数组作为备忘录,减少递归状态树的使用
public int climbStairs(int n) {
int[] nums = new int[n+1]; // 注意边界值使用n+1,否则在缓存时会出现问题.
return climb (n, nums);
}
private int climb (int n, int[] nums) {
if (n <= 2) return n;
if (nums[n] > 0) return nums[n];
nums[n] = climb(n-1, nums) + climb(n-2, nums);
return nums[n];
}
以上是关于假设你正在爬楼梯。需要 n 阶你才能到达楼顶的主要内容,如果未能解决你的问题,请参考以下文章