剑指offer之二进制中的1的个数与斐波那契数列
来源:互联网 发布:什么视频会议软件好 编辑:程序博客网 时间:2024/05/16 17:01
斐波那契数列
一般教材都是用的递归
long long F(unsigned int n){ if(n<=0) return 0; if(n==1) return 1; return F(n-1)+F(n-2);}
但是这种方法随着n的增大,时间复杂度以指数的方式递增,所以可采用下面这种方法。
long long Fibonacci2(unsigned n){ if(n<2) return n; long long FibNumZero=0; long long FibNumOne=1; long long FibNumN; for(int i=2;i<=n;i++) { FibNumN=FibNumZero+FibNumOne; FibNumZero=FibNumOne; FibNumOne=FibNumN; } return FibNumN;}
时间复杂度为O(n)。
二进制中的1的个数
两种解法,第一种如果是32位,则循环32次,第二种有多少个1,就循环几次,其他方法实现时要注意计算机中负数是以补码方式表示的。
#include<iostream>using namespace std;int NumberOf1A(int n){ int count = 0; unsigned int flag = 1; while(flag) { if(n & flag) count++; flag=flag<<1; } return count;}int NumberOf1B(int n){ int count=0; while(n) { n=n&(n-1); count++; } return count;}void test(int n,int expect){ if(NumberOf1A(n)==expect) cout<<"NumberOf1A pass"<<endl; else cout<<"NumberOf1A fail"<<endl; if(NumberOf1B(n)==expect) cout<<"NumberOf1B pass"<<endl; else cout<<"NumberOf1B fail"<<endl;}int main(){ test(0,0); test(4,1); test(1,1); test(0x80000000, 1); return 0;}
0 0
- 剑指offer之二进制中的1的个数与斐波那契数列
- 剑指Offer笔记—— 斐波那契数列 二进制中1的个数
- 剑指Offer 二进制中的1的个数
- 【剑指offer】二进制中的1的个数
- 剑指Offer之斐波那契数列
- 剑指offer之斐波那契数列(Fibonacci)
- 剑指Offer之 - 斐波那契数列
- 剑指offer系列之七:斐波那契数列
- 剑指offer系列之7:斐波那契数列
- 剑指offer(八)之斐波那契数列
- 斐波那契数列[剑指offer]之python实现
- 剑指Offer之斐波那契数列问题
- 剑指offer之斐波那契数列
- 《剑指offer》之斐波那契数列
- 剑指offer之斐波那契数列
- 剑指offer之斐波那契数列
- 【剑指offer】斐波那契数列
- 剑指offer--斐波那契数列
- 修路
- Android C#开发--The file "obj\Debug\android\bin\packaged_resources" does not exist.
- [JZOJ4628] 立方体
- IOS代理
- 实例 -- Loadrunner实现Android / IOS 手机APP压力测试
- 剑指offer之二进制中的1的个数与斐波那契数列
- NYOJ数数
- 把 Nginx 创建为 Windows 的一个服务
- 【JZOJ4628】立方体
- [Django] use django modules in standalone python script
- centos7设置静态ip地址
- 20160715常规赛总结
- 用跳板机连接到服务器的方法
- 程序员跳槽注意事项