今天偶然看到群里有小伙伴在讨论这道算法题,说实话算法题写的确实有些少了近期,都在忙着搬砖,所以简单做个记录。
在你面前有一个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}
}
}
爬楼梯问题,一次可以爬1阶,2阶3阶,但是爬了一次3阶以后的K步都不能走3阶,问N个台阶在给定K的情况下有多少种情况 d p [ i ] [ j ] dp[i][j] dp[i][j]表示爬到第 i i i级台阶,距离上次爬三阶步数 j j j步的状态。 d p [ i ] [ j ] dp[i][j] dp[i][j]可以转移到哪些状态? 如果 0 ≤ j < k 0 \leq j ...
楼梯有n个台阶,上楼可以一步上1阶,也可以一步上两阶。一共有多少种上楼的方法?...
题目描述 N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归) 输入描述: 输出描述: 示例1 输入 复制 输出 复制 ...
在方法内调用自身,找规律:F(3)=F(2)+F(1),所以F(N)=F(N-1)+F(N-2)...
在你面前有一条长长的阶梯,如果每步跨2阶,那么最后剩1阶;如果每步跨3阶,那么最后剩2阶;如果每步跨5阶,那么最后剩4阶;如果每步跨6阶,最后剩5阶;只有当每步跨7阶时,最后才正好走完,一阶也不剩。请问这条阶梯至少有多少阶?(求所有三位阶梯数)。...
上楼梯有多少种走法 一个小孩上楼梯,可以走 一步, 两步,三步, 问走n阶楼梯有多少种走法...
N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式? 思路一:设有x次走一阶,y次走两阶,则一定满足x+2*y=n,且x、y均为整数,那么对于任何一个满足的x的可能走法共有 C(x+(n-x)/2,x)种走法,即从数x+(n-x)/2中取x种组合,值为(x+(n-x)/2)的阶乘除以x的阶乘与(n-x)/2的阶乘的乘积。 依次取可能的x值,然后相加每一种的可能情况就可以了。代...
题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。 输入: 输入包括一个整数N。 输出: 可能有多组测试数据,对于每组数据, 输出当楼梯阶数是N时的上楼方式个数。 样例输入: 4 样例输出: 5 思路一:设有x次走一阶,y次走两阶,则一定满足x+2*y=n,且x、y均为整数,那么对于任何一个满足的x的可能走法共有 C(x+(n-x)/2,x)种走法,即从数x+(n-x)/2中...
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。 4. 1 阶 + 1 阶 + 1 阶 5. 1 阶 + 2 阶 6. 2 阶 + 1 阶 总结: 想象一下,...
time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard output Anton is playing a very interesting computer game, but now he is stuck at one of the levels. T...