0
点赞
收藏
分享

微信扫一扫

手撕一道算法题 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?

源码之路 2022-11-07 阅读 146


前言

今天偶然看到群里有小伙伴在讨论这道算法题,说实话算法题写的确实有些少了近期,都在忙着搬砖,所以简单做个记录。

 

题:

在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?

 

核心思路,拆解:

 

到达台阶 11时,有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶11,也就是统计出 到达10阶  + 到达9阶 的 方法总数。

 

那么到达10阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶10,也就是统计出 到达 9 阶  + 到达 8 阶 的 方法总数。

 

那么到达9阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶9,也就是统计出 到达 8 阶  + 到达 7 阶 的 方法总数。

 

一样以此类推......

 

那么到达3阶,同样 有可能是通过走 1阶上来的 ;也可能是走2阶上来的;

所以统计出到达 台阶3,也就是统计出 到达2 阶  + 到达 1 阶 的 方法总数。

 

而到达2阶,方法总数有两种, 分两次 1 台阶走 或者 一次走 2  台阶;

而到达1阶,方法总数有一种, 一次走 1 台阶;

 

代码解:

public class Test {

public static void main(String[] args) {

//解法1
Integer result1 = getMethodLoop(11);
System.out.println(result1); //144

//解法2
Integer result2=getSumMethods(11);
System.out.println(result2); //144
}
public static int getMethodLoop(int sum){

if (sum==1 ){

return 1;

}else if (sum==2){

return 2;

}else {

int m1=sum-1;
int m2=sum-2;
int result= getMethodLoop(m1)+getMethodLoop(m2);
return result;
}




}


private static Integer getSumMethods(int sum) {


Map<String,Integer> map=new HashMap<>();
map.put("1",1);
map.put("2",2);

for (int i=3;i<=sum;i++){

Integer m1=i-1;
Integer m2=i-2;
Integer m1Value = map.get(String.valueOf(m1)) ;
Integer m2Value = map.get(String.valueOf(m2)) ;
map.put(String.valueOf(i),m1Value+m2Value);
}
System.out.println(map.toString());
return map.get(String.valueOf(sum));
//{11=144, 1=1, 2=2, 3=3, 4=5, 5=8, 6=13, 7=21, 8=34, 9=55, 10=89}
}





}

 

 

举报

相关推荐

0 条评论