在你面前有一个n阶的楼梯(n>=100且n<500),你一步只能上1阶或3阶。
请问计算出你可以采用多少种不同的方式爬完这个楼梯(到最后一层为爬完)。
要考虑n,n=100的时候,int类型long类型都溢出了,而且越来越大,要用BigInteger数据类型,
规律就是a[n]=a[n-1]+a[n-3],先列出前六个台阶的总的方式,找到规律,用递归会超时,直接用循环更快。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.math.BigInteger; public class Main { public static void main(String[] args) throws Exception
{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); BigInteger[] count = new BigInteger[n]; count[0]=new BigInteger("1"); count[1]=new BigInteger("1"); count[2]=new BigInteger("2"); for(int i = 3;i < n;i++) { count[i] = count[i-1].add(count[i-3]); } System.out.print(count[n-1]); } }
链接:https://www.nowcoder.com/questionTerminal/1e6ac1a96c3149348aa9009709a36a6f?f=discussion
来源:牛客网