面试题9:斐波那契数列
菲波那切数列是每一个学C语言的人都特别熟悉的一个问题。
思路:
用递归实现的过程中会出现重复计算的情况,此时,可以利用动态规划的思想,保存中间结果,这样可以避免不必要的计算。
Java代码:
- package org.algorithm.pointtooffer;
-
-
-
-
-
-
-
- public class Item09 {
- public static void main(String args[]) {
- int n = 3;
- System.out.println(fibonacci(n));
- }
-
- public static int fibonacci(int n) {
- if (n == 0) {
- return 0;
- } else if (n == 1) {
- return 1;
- } else {
-
- int zero = 0;
- int one = 1;
- int fN = 0;
- for (int i = 2; i <= n; i++) {
- fN = one + zero;
- zero = one;
- one = fN;
- }
- return fN;
- }
- }
- }
面试题10:二进制中1的个数
题目大致为:
实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
思路:
把一个整数减去1,再和原整数做与运算,会把最右边一个1编程0,那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。
Java实现
- package org.algorithm.pointtooffer;
-
-
-
-
-
-
-
- public class Item10 {
- public static void main(String args[]) {
-
- int n = 9;
- System.out.println("9的二进制表示中1的个数为:" + numberOf1(n));
-
- }
-
-
-
-
-
-
- public static int numberOf1(int n) {
- int count = 0;
-
- while (n != 0) {
- count++;
- n = (n - 1) & n;
- }
-
- return count;
- }
-
- }