我采用的是递归的方式解出链接LeetCode70题.,代码如下
class Solution {
HashMap haMap = new HashMap();
public int climbStairs(int n) {
if(n == 1){
return 1;
}
if(n ==2){
return 2;
}
if(haMap.get(n) != null){
return haMap.get(n);
}else{
int result = climbStairs(n-1) + climbStairs(n-2);
haMap.put(n,result);
return result;
}
}
}
如图
此时绿圈处于黄圈处计算结果一致,又因为6的计算结果是5的计算结果加4的计算结果,所有他是斐波那契数列。
所以我们可以用HashMap将4的结果存起来,当计算5的结果时只需要计算3的结果就可以了。
又由上图结论可以写出如下代码,使用循环的方式实现LeetCode70题的需求。
class Solution {
public int climbStairs(int n) {
if(n == 1){
return 1;
}
if(n == 2){
return 2;
}
int subtree = 1;//子树
int rootNode = 2;//上一个根节点
int result = 0;
for(int i = 3;i <= n;i++){
result = subtree + rootNode;
subtree = rootNode;
rootNode = result;
}
return result;
}
}
由此可以延伸出 LeetCode的第509题计算菲波那切数列
代码实现
class Solution {
public int fib(int n) {
int subTree = 1;
int rootNode = 1;
if(n == 1){
return subTree;
}
if(n == 2){
return rootNode;
}
int result = 0;
for(int i = 3;i <= n;i++){
result = subTree + rootNode;
subTree = rootNode;
rootNode = result;
}
return result;
}
}



