階段を登る2、1段または3段の階段を歩く(java)

2639 ワード

あなたの前にはn階の階段(n>=100でn<500)があり、1階か3階しか上がらない.この階段をどのように登ることができるかを計算してください(最後の階まで登ることができます).
n,n=100を考慮するとintタイプlongタイプはすべてオーバーフローして、しかもますます大きくなって、BigIntegerデータ型を使って、
法則はa[n]=a[n-1]+a[n-3]であり、まず最初の6つの階段の総方式をリストし、法則を見つけ、再帰でタイムアウトし、直接循環を使うのがもっと速い.
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出典:牛客網