《剑指offer》之7-9题

7.斐波那契数列

问题描述

  都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

实现思想

  了解斐波那契数列的规律就Ok了。1,1,2,3,5,8,。。。

代码

function Fibonacci(n)
{
    // write code here
    if(n==0||n==1){
        return n;
    }
    var N1=1,N2=0;
    for(let i=2;i<=n;i++){
        N1=N1+N2;
        N2=N1-N2;
    }
    return N1;
}

8.跳台阶

问题描述

  一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法

实现思想

  使用数学归纳法,第一个台阶有一种跳法,第二个台阶有两种跳法,第三个台阶有三种跳法,依次类推

代码

function jumpFloor(number)
{
    // write code here
    if(number<0){
        return 0;
    }
    if(number==0){
        return 0;
    }
    var N1=1,N2=0;
    for(let i=1;i<=number;i++){
        N1=N1+N2;
        N2=N1-N2;
    }
    return N1;
}

9.变态跳台阶

问题描述

  一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

实现思想

  同样使用数学归纳法。

代码

function jumpFloorII(number)
{
    // write code here
    return Math.pow(2,number-1);

}
时间: 2024-08-29 10:44:45

《剑指offer》之7-9题的相关文章

【剑指offer】第四题 替换空格

/** * 剑指offer 第4题 替换空格 * 特点:1.先扫描串中的空格数,计算好替换后的长度 * 2.使用双指针,从后面开始向前替换,避免从前开始每次替换后就要移动后面的所有的数据 * 测试用例:特殊:有多个空格 * 错误:数组长度不够,字符串为空 * */ package javaTrain; public class Offer4 { public static void main(String[] args) { String a = "Hello I am Daisy Dong!&

剑指offer第十八题 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 解题思路:一次去掉一个外圈,当最后只剩一行或一列时停止递归.(ps:这题就是绕,仔细点就解决了!!!) 1 import java.util.ArrayList; 2 public class Solution { 3 publ

《剑指offer》第十七题:打印1到最大的n位数

// 面试题17:打印1到最大的n位数 // 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则 // 打印出1.2.3一直到最大的3位数即999. #include <cstdio> #include <memory> void PrintNumber(char* number); bool Increment(char* number); void Print1ToMaxOfNDigitsRecursively(char* number, int length

【剑指offer】 第三题 二维数组查找

package javaTrain; public class offer3 { public static void main(String args[]) { int[][] a = {{0,1,2,3},{1,2,3,4},{2,3,4,5},{6,7,8,9}}; System.out.println(find(a,10)); } public static boolean find(int[][] a,int num) { if(a == null) return false; int

【校招面试 之 剑指offer】第9-1题 用两个栈实现一个队列

#include<iostream> #include<stack> using namespace std; template <typename T> void pushQueue(stack<T> &stack1, T t){ stack1.push(t); } template<typename T> T popQueue(stack<T> &stack1, stack<T> &stack2

【校招面试 之 剑指offer】第9-2题 用两个队列实现一个栈

#include<iostream> #include<queue> using namespace std; // 对于出栈解决的思路是:将queue1的元素除了最后一个外全部放到queue2中,然后再pop出queue1的最后一个元素... template<typename T> void popStack(queue<T> &queue1, queue<T> &queue2){ if(queue1.size() == 0)

【校招面试 之 剑指offer】第10-3题 矩阵覆盖问题

题目:我们可以使用2??1的小矩形横着或者竖着去覆盖更大的矩形.请问用8个2??1的小矩形无重叠地覆盖一个2??8的大矩形,共有多少种方法? 分析:当放第一块时(假定从左边开始)可以横着放,也可以竖着放,记总的情况为f(8).如果是竖着放,则记下来还有f(7)种放法:若是横着放,则下一块必须横着放,则还有f(6)种放法. 所以可以推导出公式:f(1) = 1 f(2) = 2 f(n)(n为偶数) = f(n-1)+f(n-2); #include<iostream> #include<

【校招面试 之 剑指offer】第16题 数值的整数次方

方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况. #include<iostream> using namespace std; template<typename T> T myPow(T a, int m){ double base = 1; int flag = (m < 0) ? -1 : 1; int n = (m < 0) ? -m : m; while(n > 0){ base = base * a; n --; } if

《剑指offer》第五题(重要!从尾到头打印链表)

文件main.cpp // 从尾到头打印链表 // 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. #include <iostream> #include <stack> #include "List.h" using namespace std; void PrintListReversingly_Iteratively(ListNode* pHead)//解法一:使用栈 { stack<ListNode*> nodes;//定义