心情
周末观影《她比烟花寂寞》。导演先叙述姐姐的故事,观众视角先入为主地给妹妹贴了个自私狂妄的标签。当镜头转到妹妹的世界时,才发现她是如此的令人心疼。她的一生,“先成为不朽,然后死去!”
读题
leetcode: 70. 爬楼梯
描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
测试用例:
输入: 3
输出: 3
注意:给定 n 是一个正整数。
列了前几阶,这不就是斐波那契数列嘛。
反过来想,第n阶的爬法:第n-1阶+1 和 第n-2阶+2,f(n)=f(n-1)+f(n-2)
思路
做个循环,从第一阶第二阶开始递推,返回第n阶的值
实现
public int climbStairs(int n) {
int[] nums = new int[n+1];
//第0阶-从后向前假设出来的
nums[0] = 1;
//第1阶-按照可能性算出来的
nums[1] = 1;
for (int i = 2; i < n+1; i++) {
//最后一阶=倒数第二阶+倒数第三阶 的所有方法
nums[i] = nums[i-1] + nums[i-2];
}
return nums[n];
}
看起来就很简单嘛~
提交
这内存消耗的排名,看来数组都不能用了呀。
好吧,这内存消耗的排名我也是绝望了。
标答
public List<List<Integer>> threeSum(int[] nums) {
public int climbStairs(int n) {
double sqrt5 = Math.sqrt(5);
double fibn = Math.pow((1 + sqrt5) / 2, n + 1) - Math.pow((1 - sqrt5) / 2, n + 1);
return (int)(fibn / sqrt5);
}
官方题解 直接用斐波那契数列的公式实现了。本想着把高数捡起来,才发现早已还给老师了。。。