階段を登る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つの階段の総方式をリストし、法則を見つけ、再帰でタイムアウトし、直接循環を使うのがもっと速い.
リンク:https://www.nowcoder.com/questionTerminal/1e6ac1a96c3149348aa9009709a36a6f?f=discussion出典:牛客網
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出典:牛客網