第39级台阶—题解

目描述:
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
输出格式:

 

输出一个整数

 

 

解题思路:   

1.基础的动态规划

2.暴力搜索

3.将动态规划转为递归

源代码:

 



/**
 * 
 *  第39级台阶
 *
 */

public class Main
{
	public static void main(String[] args)
	{
		// 0表示左脚, 1表示右脚 
		//dp[10][0]表示10级台阶左脚到达多少种?
		//dp[10][1]表示10级台阶右脚到达多少种?
		 int dp[][] = new int[40][2];
		 dp[1][0] = 1;
         dp[1][1] = 0;
         dp[2][0] = 1;
         dp[2][1] = 1;
         for (int i = 3; i < 40; i++)
         {
             dp[i][0] = dp[i-1][1] + dp[i-2][1];
             dp[i][1] = dp[i-1][0] + dp[i-2][0];
         }
         System.out.println(dp[39][1]);
               
	}
}
-------------------------------------------------------
public class Main
{
	public static void main(String[] args)
	{
		System.out.println(f(39));
	}

	// 左脚
	private static int f(int i)
	{
       if (i == 1) return 0;
       if (i == 2) return 1;
       
       return g(i-1) + g(i-2);
	}

	// 右脚
	private static int g(int i)
	{
       if (i == 1) return 1;
       if (i == 2) return 1;
       
       return f(i - 1) + f(i - 2);
	}

}
--------------------------------------------
/**
 * 
 * @author muyichun
 *  51167078
 */
public class Main
{
	static int count = 0;
    public static void main(String[] args){
    	dfs(0, 1);//先出左脚
    	System.out.println(count);
    }
    public static void dfs(int n, int flag) {
    	if (n > 39) return;
    	if (n == 39) {
    		if (flag == 1) {
    			count++;
    		}else return ;
    	}else {
    		if (flag == 1) {
    			dfs(n+1, 0);
    			dfs(n+2, 0);
    		}else {
    			dfs(n+1, 1);
    			dfs(n+2, 1);
    		}
    	}
    }
}

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值