Google算法题:不包含连续1的非负整数

来源:互联网 发布:网络电视遥控怎么开 编辑:程序博客网 时间:2024/06/06 01:25

题目

题目来源:Link



分析



每一步的选择都依赖前一步的选择,是前面选择的组合,子问题重合,所以用动态规划

代码


package com.graph;import java.util.*;public class Solution {public int solve(int n){if(n==0) return 1;String binary = Integer.toBinaryString(n);int len=binary.length();int[] f = new int[len+1];f[0]=1;f[1]=2;//计算场i的二进制位符合要求的个数for(int i=2; i<=len; i++) {f[i] = f[i-1]+f[i-2];}//计算0~n的符合要求的总个数int sum=0;for(int i=0, k=len; i<len; i++,k--) {if(binary.charAt(i)=='1') {sum+=f[k-1];if(i>0 && binary.charAt(i-1)=='1') {return sum;}}}//先前没有return,到这里,说明n本身没有算进去sum++;return sum;}public static void main(String[] args) {Solution s = new Solution();System.out.println(s.solve(9));}}