计蒜客016-爬楼梯

81 篇文章 0 订阅
22 篇文章 0 订阅

这题先用回溯实现了一遍,但是效率太低没有AC,然后重新把他理解为Fibonacci数,做递归就好了,效率还凑合

把代码都贴在下面,如果不能理解回溯的朋友,可以看我上一篇的八皇后

假设你现在正在爬楼梯,楼梯有n级。每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部?

格式:

   第一行输入一个数n,代表楼梯的级数。

   接下来一行输出你的方法总数。

样例输入

5

样例输出

8
//******回溯实现******
import java.security.AllPermission;
import java.util.Scanner;

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
public class Main {

	public static int num; //最终台阶数
    private static int[] step = new int [10000];//具体每一步的台阶数 
    private static long sum =0; //总共多少种情况
    
    
    public static int all(int n){//求一共走了多少台阶
    	int All=0;
    	for(int i=0;i<n+1;i++)
    		All+=step[i];
    	return All;
    }		
    public static void next(int N){//递归求复合条件的解
    	int n;
    	for(int i=1;i<=2;i++){//一步两步 一步两步 
    		step[N] = i;
    		if(all(N)==num)//台阶数满足,总和加1
    			sum++;
    		else if(all(N)<num)//不够总台阶数,再走下一步
    			next(N+1);	
    	}
    }
    
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner in = new Scanner(System.in);
		num = in.nextInt();
		
	    next(0);
	    System.out.println(sum);
		
	}

}

</pre><pre name="code" class="java">//*****普通递归实现*****
import java.security.AllPermission;
import java.util.Scanner;

public class Main {
	
	private static int[] all = new int[1000];
	 
	public static int step(int n){
		int sum=0;
		if(all[n]>0)
			return all[n];
		if(n==0||n==1)
			return 1;
		else 
			sum=step(n-1)+step(n-2);
		all[n]=sum;
		return sum;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		
		System.out.println(step(n));
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值