Non-negative Integers without Consecutive Ones
n位二进制,求不包含连续1的二进制(n位)数字个数。
http://www.geeksforgeeks.org/count-number-binary-strings-without-consecutive-1s/
也可以令f[i],表示共i位的二进制数字中,不包含连续1的二进制(i位)数字的个数。
f[i]的组成有两部分:
最高位为1:只有当次高位为0,且满足条件的二进制数字个数,即 f[i-2]
最高位为0:次高位为0或1且满足条件的数字个数,即f[i-1]
得: f[i] = f[i-2] + f[i-1]
给定num,求1~num的数字中,求对应的二进制不包含连续1的数字个数。
600. Non-negative Integers without Consecutive Ones
Given a positive integer n, find the number of non-negative integers less than or equal to n, whose binary representations do NOT containconsecutive ones.
Example 1:
Input: 5
Output: 5
Explanation:
Here are the non-negative integers <= 5 with their corresponding binary representations:
0 : 0
1 : 1
2 : 10
3 : 11
4 : 100
5 : 101
Among them, only integer 3 disobeys the rule (two consecutive ones) and the other 5 satisfy the rule.
Note: 1 <= n <= 109
题目:
给定的数字num,转换成二进制,共n位。
首先由上一题的结论,得到f[i],1 <= i < n
假设数字num为从高位到低位B: bn-1, bn-2, ..., 3,2,1
应该在比num小或相等的数字中,计算没有连续二进制1的数字的个数。
从高位到低位,遍历B,如果遇到1,则对应位改变为0后,则肯定比原num小。
如:10110,从高到低遍历二进制位
第一个1,前缀变为0,剩下四位,比原来的num小,则满足条件的数字个数为f(4)
第二个1,前缀变为100,剩下两位,100XX,比原来的num小,则满足条件的数字个数为f(2)
第三个1,前缀变为1010,剩下一位,1010X,比原来的num小,则满足条件的数字个数为f(1)
遍历过程中,当遇到两个连续的1时需要中止遍历。如原num为1XX11XXX,继续遍历找到后面的1并改变为0,得到的数字确实比num小,但不满足不存在连续1的条件。
遍历过程中,考虑的都是比原num小的数,最后还需要判断一下原num是否符合条件。
int findIntegers(int num) {
vector<int> b_num;
//int tmp = num;
while( num != )
{
b_num.push_back( num % );
num /= ;
}
int f[] = { };
f[] = ;
f[] = ;
int n = b_num.size();
for( int i = ; i < n; i++ )
{
f[i] = f[i-] + f[i-];
}
int ans = ;
int has_d_one = false;
for( int i = n-; i >= ; i-- )
{
if( b_num[i] )
{
ans += f[i];
if( i < n- )
{
if( b_num[i+] )
{
has_d_one=true;
break;
}
}
}
}
//判断一下num自身是否含连续1
//if( !( tmp & (tmp<<1) ) )
//{
// ans++;
//}
if( !has_d_one )
{
ans++;
}
return ans;
}
Non-negative Integers without Consecutive Ones的更多相关文章
- [LeetCode] Non-negative Integers without Consecutive Ones 非负整数不包括连续的1
Given a positive integer n, find the number of non-negative integers less than or equal to n, whose ...
- [Swift]LeetCode600. 不含连续1的非负整数 | Non-negative Integers without Consecutive Ones
Given a positive integer n, find the number of non-negativeintegers less than or equal to n, whose b ...
- 600. Non-negative Integers without Consecutive Ones
Given a positive integer n, find the number of non-negative integers less than or equal to n, whose ...
- [Algorithm] Count Negative Integers in Row/Column-Wise Sorted Matrix
// Code goes here function countNegative (M, n, m) { count = ; i = ; j = m - ; && i < n) ...
- 第十六周 Leetcode 600. Non-negative Integers without Consecutive Ones(HARD) 计数dp
Leetcode600 很简单的一道计数题 给定整数n 求不大于n的正整数中 二进制表示没有连续的1的数字个数 在dp过程中只要保证不出现连续1以及大于n的情况即可. 所以设计按位dp[i][j]表示 ...
- Interleaving Positive and Negative Numbers
Given an array with positive and negative integers. Re-range it to interleaving with positive and ne ...
- [LintCode] Interleaving Positive and Negative Numbers
Given an array with positive and negative integers. Re-range it to interleaving with positive and ne ...
- Lintcode: Interleaving Positive and Negative Numbers 解题报告
Interleaving Positive and Negative Numbers 原题链接 : http://lintcode.com/zh-cn/problem/interleaving-pos ...
- SH Script Grammar
http://linux.about.com/library/cmd/blcmdl1_sh.htm http://pubs.opengroup.org/onlinepubs/9699919799/ut ...
随机推荐
- 剑指offer例题——跳台阶、变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: n<=0时,有0种跳法 n=1时,只有一种跳法 n=2时,有 ...
- python 函数返回值笔记
今天学习python时候学习到闭包和柯里化 感觉看概念时候不好理解,自己写下大概就明白点了 柯里化如下 定义一个加法函数 def add(x, y): return x + y 这是没有柯里化之前的函 ...
- Oracle数据文件迁移到裸设备
本文主要描述如何将Oracle表空间的文件系统形式的数据文件迁移到LV裸设备上. 前提条件 1.oracle运行正常. 2.已使用LVM命令规划好LV文件.如/dev/vgoracle/lvdatat ...
- Android源码50例汇总,欢迎各位下载(转载)
下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载. 源码实例如下: <Android应用开发揭秘>源代码推荐 http://down.51 ...
- 抢红包js程序
https://www.cnblogs.com/miid/p/5192235.html <!DOCTYPE html> <html> <head> <meta ...
- MPI Maelstrom-单源最短路-Djsktra
BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distribute ...
- R语言-画线图
R语言分高水平作图函数和低水平作图函数 高水平作图函数:可以独立绘图,例如plot() 低水平作图函数:必须先运行高水平作图函数绘图,然后再加画在已有的图上面 第一种方法:plot()函数 > ...
- css flex 兼容ios android--商品展示 添加购物车
https://blog.csdn.net/u010035608/article/details/52711248 <!DOCTYPE html> <html> <hea ...
- 云笔记项目-测试时无法连接MySQL Server
事情起因:用Mac提交云笔记项目到SVN后,使用台式机import SVN上的云笔记代码,发现到了台式机上,进行junit测试时无法连接Mysql数据库服务器,而Mac上是可以的.以下是报警内容和报警 ...
- 算法之LOWB三人组之选择排序
选择排序 思想是在一个列表中每次循环一遍,拿到最小值,接着再从剩下的无序区中继续拿最小值,如此循环,直到结束. 时间复杂度为O(n^2) # 最简单的一个选择排序,循环一个列表,拿到最小值,添加到一个 ...