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)); } }
相关文章推荐
- 给定一个正整数n,找到小于或等于n的非负整数,其二进制表示不包含连续的整数。
- 笔试算法题(15):-1到N中包含1的数字的个数 & 连续和为N的序列
- 字符串处理算法(一)检测输入字符串中是否包含连续的或者离散的test
- 字符串处理算法(一)检测输入字符串中是否包含连续的或者离散的test
- C#实现用欧几里德算法、连续整数检测算法、公因数算法求两个非负整数的最大公约数
- 算法题-从包含n个元素的无序列表中取出和最大的连续子集
- 求最大连续子列和的算法和时间复杂度的分析(包含四种不同时间复杂度的算法)
- 查找连续相同值的算法,并给出连续相同值的个数以及位置
- 很多童鞋喜欢玩一些lol、dota这类游戏,这类游戏有一个特点,在你不死的情况下连续杀人会有不同称号。 下面输入一组字符,其中只包含K和D,K代表杀敌,D代表死亡,求他最高称号。 0/1/2 - Yo
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
- Google 图片搜索算法
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<
- 内存的连续分配与回收算法
- 微软、Google等面试题、算法
- 11月第4周安全回顾 Google包含大量恶意网页 Lotus存漏洞
- google youtube 电影推荐算法
- Google算法十年变迁史
- 包含中英文的字符串截取算法,与php系统字符串截取函数