11天刷剑指offer——JavaScript版——第二天

7、斐波那契数列

题目描述

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

思路

俗称“兔崽子数列”,f(1)=1,f(2)=1,f(3)=f(1)+f(2)

代码
function Fibonacci(n)
{
    if(n <= 0){
        return 0;
    }else if(n <= 2){
        return 1;
    }else{
        var result = [];
        result[1] = 1;
        result[2] = 2;
        for(var i = 3;i < n;i++){
            result[i] = result[i-1] + result[i - 2];
        }
        return result[n - 1];
    }
}

8、跳台阶

题目描述

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

思路

与“兔崽子数列”相似,跳1个台阶有一种方法,跳2个台阶可以有两种跳法,而跳3个台阶则就是跳一个台阶和跳2个台阶方法总和。

代码
function jumpFloor(number)
{
    if(number <= 0){
        return 0;
    }else if(number == 1){
        return 1;
    }else if(number == 2){
        return 2;
    }else{
        var result = [];
        result[1] = 1;
        result[2] = 2;
        for(var i = 3;i <= number;i++){
            result[i] = result[i -1] + result[i - 2];
        }
        return result[number];
    }
}

9、变态跳台阶

题目描述

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

思路

递归的思想,结合跳台阶的例子,可以理解为跳1个台阶有一种方法,跳2个台阶可以有两种跳法,而跳3个台阶则就是跳一个台阶和跳2个台阶方法总和再加1,跳四个台阶就是跳一个台阶、跳2个台阶方法和跳三个台阶方法总和再加1……如此递归。
思路:f(1)=1,f(2)=2,f(3)=1+f(2)+f(1)…
f(3)可以这样考虑:分跳3(本身值直接+1),跳1,跳2三种情况,跳1之后还剩f(3-1)种跳法,跳2之后还有f(3-2)种跳法,所以f(3)可以等于这三种分法相加。类推f(n)=1+f(1)+f(2)+…+f(n-1)。

代码
function jumpFloorII(number)
{
    // write code here
    if(number <= 0) return 0;
    if(number == 1) return 1;
    var tmp = 1;
    while(number > 1){
        number--
        tmp += jumpFloorII(number);
    }
    return tmp;
}

10、矩形覆盖

题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

思路

这个和青蛙跳台阶是一个道理,这里换种方式实现。
f(n) = f(n-1)+f(n-2), f(1) = 1; f(2) = 2;

代码
function rectCover(number)
{
    if(number <= 0) return 0;
    if(number == 1) return 1;
    if(number == 2) return 2;
    var n1 = 1;
    var n2 = 2;
    var result=0;
    for(var i = 3 ; i <= number ; i++){
        result = n1 + n2;
        n1 = n2;
        n2 = result;
    }
    return result;
}

11、二进制中1的个数

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

思路一

普通的字符串方法。

代码
function NumberOf1(n)
{
  /* 无符号右移运算符由三个大于号(>>>)表示,它将无符号 32 位数的所有数位整体右移。对于正数,无符号右移运算的结果与有符号右移运算一样。 */
    if(n<0){
        n = n>>>0;
    }
    //toString() 方法可把一个逻辑值转换为字符串,并返回结果。z转换二进制
    var charCode = n.toString(2);
    var count = 0;
    for(var i = 0 ; i <= charCode.length - 1 ; i++){
        if(charCode[i] == 1){
            count++;
        }
    }
    return count;
}
思路二

把一个整数减去1,再和原来的整数做与运算,会把该整数最右边的一个1变为0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。

代码
function NumberOf1(n)
{
    // write code here
    var count=0;
    while(n!=0){
        n=n&(n-1);
        count++
    }
    return count;
}

12、数值的整数次方

题目描述:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

思路一

用Math对象的pow方法

代码
function Power(base, exponent)
{
    return Math.pow(base,exponent);
}
思路二

用**运算符即可——乘方运算符

代码
function Power(base, exponent)
{
    return base**exponent;
}
思路三

先判断浮点数的正负情况,然后通过累乘的方式

代码
function Power(base, exponent)
{
    // write code here
    if(exponent==0) return 1;
    var result=1,flag=false;
    if(exponent<0) {exponent=Math.abs(exponent);flag=true;}
    while(exponent>0){
        result*=base;
        exponent--;
    }
    if(flag) result=1/result;
    return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值