大家都知道斐波那契数列,现在要求输入一个整数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];
}
}
一只青蛙一次可以跳上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];
}
}
一只青蛙一次可以跳上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;
}
我们可以用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;
}
输入一个整数,输出该数二进制表示中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;
}
给定一个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;
}