剑指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
相关文章推荐
- 剑指offer每日一刷-2017年11月12日
- 每日六题-剑指offer(三)
- 小组项目冲刺第二天每日站立会议
- 【每日工作-第一天、第二天】Java基础知识
- 剑指offer每日一刷-2017年11月14日
- 剑指Offer每日6题(JavaScript版)--第五天
- 剑指Offer每日6题(JavaScript版)--第三天
- 剑指Offer每日6题(JavaScript版)--第六天
- 【每日Scrum】第二天(4.23) TD学生助手Sprint2站立会议
- 第二天 每日一句
- sprint3 【每日scrum】 TD助手站立会议第二天
- 剑指offer第二天
- 每日六题-剑指offer(五)
- 【每日Scrum】第二天(4.12) TD学生助手Sprint1站立会议
- 剑指offer每日一刷-2017年11月19日
- 每日会议<第二天>
- 剑指Offer每日6题(JavaScript版)--第八天
- 爱创课堂每日一题第二天8/24日 Quirks模式是什么?它和Standards模式有什么区别?
- 每日六题-剑指offer(四)
- 剑指Offer每日6题(JavaScript版)--第一天