《剑指offer》学习心得第三日

来源:互联网 发布:爱知日语培训 编辑:程序博客网 时间:2024/04/29 22:27

一、fabonacci数列

1、递归实现(不推荐)

int Fabonacci(int n){if( n == 0)return 0;if( n == 1)return 1;return Fabonacci(n-1) + Fabonacci(n-2);}


此种方式效率很低,而且有大量的重复计算,数字过大时容易造成程序栈溢出。

2、使用循环

int Fabonacci(int n){if( n == 0)return 0;if( n == 1)return 1;int firstNum = 0;int secondNum = 1;int result;for (int i=2; i<=n; ++i){result = firstNum + secondNum;firstNum = secondNum;secondNum = result;}return result;}


二、位运算相关

二进制中1的个数

1、常规解法(计算次数较多)

int NumberOf1(int num){int count = 0;unsigned int flag = 1;while (flag){if (num & flag)count++;flag = flag<<1;}return count;}


 

2、好的解法(有几个1比较几次)

int NumberOf1(int num){int count = 0;while (num){count++;num = num & (num - 1);}return count;}


 

三、数值的整数次方

1、判断输入的合法性,equal(base, 0.0) && exp  <0 不合法,注意判断base的时候不能直接 == ,浮点数要减去要比较的数和很小的一个数0.0000001比较 (>-0.0000001 && <0.00000001)

2、计算abs(exp),利用公式(exp偶数、奇数)两种情况,递归计算pow

3、判断exp的符号,若为负则需计算倒数

 

 

0 0
原创粉丝点击