Non-negative Integers without Consecutive Ones LeetCode solution in C++
1class Solution {2public:3int dp[31][2];4vector<int> f() {5vector<int> res(31, 1);6dp[1][0] = 0;7dp[1][1] = 1;8for (int i = 2; i < 31; i++) {9dp[i][0] = dp[i - 1][0] + dp[i - 1][1];10dp[i][1] = dp[i - 1][0];11}1213for (int i = 1; i < 31; i++) {14res[i] = res[i - 1] + dp[i][0] + dp[i][1];15}1617res[1] = 2;18return res;19}2021int findIntegers(int n) {22int res = 0;23int bits = 0;24int temp = n;25vector<int> v;26while (temp > 0) {27bits++;28v.push_back(temp & 1);29temp = temp >> 1;30}31vector<int> nums = f();3233bool valid = true, isValid = true;3435for (int i = bits - 2; i >= 0; i--) {36if (v[i] == 1 && v[i + 1] == 1) {37res += nums[i];38isValid = false;39break;40} else if (v[i] == 1)41res += nums[i];42}4344res += nums[bits - 1];45return isValid == true ? res + 1 : res;46}47};