您的位置:首页 > 编程语言 > Go语言

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

2017-08-06 09:52 120 查看

题目

题目来源: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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Google 动态规划
相关文章推荐