剑指Offer笔记—— 斐波那契数列 二进制中1的个数

来源:互联网 发布:linux tomcat 宕机 编辑:程序博客网 时间:2024/06/05 18:09

面试题9:斐波那契数列

    菲波那切数列是每一个学C语言的人都特别熟悉的一个问题。

思路:

    用递归实现的过程中会出现重复计算的情况,此时,可以利用动态规划的思想,保存中间结果,这样可以避免不必要的计算。

Java代码:

[java] view plain copy
  1. package org.algorithm.pointtooffer;  
  2.   
  3. /** 
  4.  * 面试题9:斐波那契数列 
  5.  *  
  6.  * @author dell 
  7.  *  
  8.  */  
  9. public class Item09 {  
  10.     public static void main(String args[]) {  
  11.         int n = 3;  
  12.         System.out.println(fibonacci(n));  
  13.     }  
  14.   
  15.     public static int fibonacci(int n) {  
  16.         if (n == 0) {  
  17.             return 0;  
  18.         } else if (n == 1) {  
  19.             return 1;  
  20.         } else {  
  21.             //由zero和one保存中间结果  
  22.             int zero = 0;  
  23.             int one = 1;  
  24.             int fN = 0;  
  25.             for (int i = 2; i <= n; i++) {  
  26.                 fN = one + zero;  
  27.                 zero = one;  
  28.                 one = fN;  
  29.             }  
  30.             return fN;  
  31.         }  
  32.     }  
  33. }  


面试题10:二进制中1的个数

题目大致为:
    实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
思路:
    把一个整数减去1,再和原整数做与运算,会把最右边一个1编程0,那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。
Java实现
[java] view plain copy
  1. package org.algorithm.pointtooffer;  
  2.   
  3. /** 
  4.  * 面试题10:二进制中1的个数 
  5.  *  
  6.  * @author dell 
  7.  *  
  8.  */  
  9. public class Item10 {  
  10.     public static void main(String args[]) {  
  11.   
  12.         int n = 9;  
  13.         System.out.println("9的二进制表示中1的个数为:" + numberOf1(n));  
  14.   
  15.     }  
  16.       
  17.     /** 
  18.      * 利用了与的操作 
  19.      * @param n 
  20.      * @return 
  21.      */  
  22.     public static int numberOf1(int n) {  
  23.         int count = 0;  
  24.   
  25.         while (n != 0) {  
  26.             count++;  
  27.             n = (n - 1) & n;  
  28.         }  
  29.   
  30.         return count;  
  31.     }  
  32.   
  33. }