您的位置:首页 > Web前端 > JavaScript

剑指Offer每日6题(JavaScript版)--第二天

2018-01-11 21:56 281 查看

7、剑指offer–斐波那契数列

题目描述:

大家都知道斐波那契数列,现在要求输入一个整数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、剑指offer–跳台阶

题目描述:

一只青蛙一次可以跳上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、剑指offer–变态跳台阶

题目描述:

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

思路:

递归的思想,结合跳台阶的例子,可以理解为跳1个台阶有一种方法,跳2个台阶可以有两种跳法,而跳3个台阶则就是跳一个台阶和跳2个台阶方法总和再加1,跳四个台阶就是跳一个台阶、跳2个台阶方法和跳三个台阶方法总和再加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、剑指offer–矩形覆盖

题目描述:

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

思路:

这个和青蛙跳台阶是一个道理,这里换种方式实现。

代码:

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;
for(var i = 3 ; i <= number ; i++){
result = n1 + n2;
n1 = n2;
n2 = result;
}
return result;
}


11、剑指offer–二进制中1的个数

题目描述:

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

思路1:普通的字符串方法。

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

代码:

//1、
function NumberOf1(n)
{
if(n<0){
n = n>>>0;
}
var charCode = n.toString(2);
var count = 0;
for(var i = 0 ; i <= charCode.length - 1 ; i++){
if(charCode[i] == 1){
count++;
}
}
return count;
}

//2、
function NumberOf1(n)
{
var count=0;
while(n != 0){
n = n & (n-1);
count++;
}
return count;
}


12、剑指offer–数值的整数次方

题目描述:

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

思路1:用Math对象的pow方法

思路2:用**运算符即可

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

代码:

//1、
function Power(base, exponent)
{
return Math.pow(base,exponent);
}

//2、
function Power(base, exponent)
{
return base**exponent;
}

//3、
function Power(base, exponent)
{
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;
}


剑指Offer每日6题(JavaScript版)-系列文章参考专栏:JavaScript版剑指offer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaScript