题目:
简述题目:
题目是说,你可以走一步或者两步,现在给定总步数,求一共有多少种走法
思路:
n = 1,res = 1;
n = 2 , res = 2;
之后的每一步就可以由两个部分组成“还差一步到目的地”和“还差两步到目的地”,也就是说:climbStairs(n) = climbStairs(n - 1) + climbStairs(n - 2);但是如果直接这样,会导致每一步都要算多一次前面的步骤,导致运算工程量很大,考虑一下目标,可以发现,我们并不关注中间过程,因此可以每算一次,记录下来,然后一次次更新,直至计算出目标为止。
public class climbStairs70 {
// public static int climbStairs(int n) {
// if(n == 1)
// return 1;
// else if(n == 2)
// return 2;
// else return climbStairs(n - 1) + climbStairs(n - 2);
// 直接这样写会超时
return 0;
// }
public static int climbStairs(int n) {
int leftTwo = 1;//还差两步
int leftOne = 2;//还差一步
int res = 0;
if(n == 1)
return 1;
else if(n == 2)
return 2;
else {
for(int i = 3; i <=n ; i++){
res = leftOne + leftTwo;//这就是climbStairs(n)
leftTwo = leftOne;//climbStairs(n-2)
leftOne = res;//climbStairs(n-1)(因为此时i已经+1了)
}
return res;
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(climbStairs(44));
}
}