algorithms
70. Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
Example 1:
Input: 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Example 2:
Input: 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step
Solution 1—自己的思路:这个其实是斐波那契数列的变化版本,可以通过递归实现,但是递归有递归深度的限制,将递归改成循环即可。
递归实现:
class Solution {
public int climbStairs(int n) {
if(n <= 0){
return 0;
}else if(n == 1){
return 1;
}else if(n == 2){
return 2;
}else{
return climbStairs(n - 1) + climbStairs(n - 2);
}
}
}
循环实现:
class Solution {
public int climbStairs(int n) {
if(n <= 0){
return 0;
}else if(n == 1){
return 1;
}else if(n == 2){
return 2;
}else{
int allStair = 0;
int oneStep = 1;
int twoStep = 2;
for(int i = 2;i < n;i++){
allStair = oneStep + twoStep;
oneStep = twoStep;
twoStep = allStair;
}
return allStair;
}
}
}
review
The Greatest Developer Fallacy Or The Wisest Words You’ll Ever Hear?
很久之前听过这么一句话“需要的时候再去学”,当时觉得还挺有道理的,没有深层次地去想过这个问题。看了这篇文章后,啪啪打脸了。总结几个要点:
1、深度有了广度也会跟着上去。当你对一个知识点钻研比较深的时候,不可避免地你会扩展到更广的范围去。
2、你不知道你不知道的知识。耗子叔说过一句话挺有道理,当你被降维打击的时候根本没有任何还手的余地(大致是这个意思)。就像当年的八国联军侵华一样就是降维打击。
3、需要的时候再去学是有针对性的,软件行业确实有太多的东西要去学,但是基础的东西不会变,所以基础的东西不能等到需要的时候再去学,对于那些框架之类的确实可以等到需要用到的时候再去学,基础扎实了框架还会难吗?
4、努力跟优秀的人一起公事,这样你的进步才会飞快。
tips
网络协议第三层知识点继续:
1、如果离开本局域网,就需要经过网关,网关是路由器的一个网口。路由器有多个网口,如果是一台服务器的话,也就是有多个网卡。
2、网关分为转发网关和nat网关。转发网关:数据包通过网关时不改变ip地址。nat网关:数据包经过网关时改变ip地址。
转发网关:公司内部两个局域网之间通信
nat网关:通过外网进行通信
share
这篇文章对线程池的异常处理总结的不错。线程池异常处理最佳实践