输入一行,包含一个整数n。
输出一个整数,表示返回的答案,由于字符串的数量巨大,可能会溢出,请输出对取模后的答案。
1
1
只有“1”满足
2
2
只有“10”和“11”满足
3
3
只有“101”,“110”,“111”满足
时间复杂度。额外空间复杂度
。
设f(i)表示长度为i的【0左边必有1的二进制字符串的数量】:
import java.util.Scanner;
public class Main {
public static final int MOD = 1 << 29;
public static void main(String[] args) {
int n = new Scanner(System.in).nextInt();
System.out.println(getCount(n));
}
public static int getCount(int n) {
if (n <= 2) {
return n;
}
int a = 1, b = 2; // f(1) = 1, f(2) = 2
for (int i = 3; i <= n; i++) {
int tmp = (a + b) % MOD;
a = b;
b = tmp;
}
return b;
}
}