输入一行,包含一个整数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; } }