
剑指Offer刷题(使用JS)
主要是自己刷题的一些小记录啦,题目来源剑指Offer
czm_orange
认真学习|认真工作|
展开
-
剑指offer11 Javascript版本——二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题解:搬运牛客大佬的方法:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成...原创 2020-03-06 21:17:16 · 171 阅读 · 0 评论 -
剑指offer10 Javascript版本——矩阵覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:本质上还是一个斐波那契数列。n = 1 的时候只能横着覆盖,一种n = 2 的时候可以横着和竖着覆盖,两种n = 3 的时候第三级横着覆盖,用了一级,剩下 n = 2,有两种覆盖方法第三季竖着覆盖,用了...原创 2020-03-06 20:59:27 · 212 阅读 · 0 评论 -
剑指offer8&9 Javascript版本——跳台阶和变态跳台阶
跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题解跳n级台阶相当于跳n-1级台阶和跳n-2级台阶的方法的总和,如果将跳n级台阶的方法看作是f(n),n-1台阶的方法是f(n-1),n-2台阶的方法是f(n-2),则f(n) = f(n-1) + f(n-2)本质上也是一个斐波那契数列。function...原创 2020-03-06 20:43:31 · 182 阅读 · 0 评论 -
剑指offer7 Javascript版本——斐波那契数列
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39题解:斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)function Fibonacci(n){ // write code here let pre = 0; ...原创 2020-03-03 23:01:24 · 188 阅读 · 0 评论 -
剑指offer6 Javascript版本——旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题解:方法一:利用数组的reduce方法,找出数组中的最小值。function minNumberI...原创 2020-03-03 22:35:49 · 171 阅读 · 0 评论 -
剑指offer5 Javascript版本——用两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题解:栈的特性是:后入先出。根据题目提示,使用 2 个栈即可。一个栈inStack用来存储插入队列的数据,一个栈outStack用来从队列中取出数据。算法分为入队和出队过程。入队过程:将元素放入 inStack 中。出队过程:outStack 不为空:弹出元素outStack 为空:将 i...原创 2020-03-03 21:50:14 · 158 阅读 · 0 评论 -
剑指offer4 Javascript版本——重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。题解:思路:根据中序遍历和前序遍历可以确定二叉树,具体过程为:根据前序序列第一个结点确定根结点根据根结点在中序序列中的位置分割出左右两个子序列...原创 2020-03-02 21:33:46 · 309 阅读 · 1 评论 -
剑指offer3 Javascript版本——从尾到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题解:方法一:将链表存入一个数组之中,然后进行数组的反转。/*function ListNode(x){ this.val = x; this.next = null;}*/function printListFromTailToHead(head){ // write code her...原创 2020-03-02 21:15:14 · 159 阅读 · 0 评论 -
剑指Offer刷题Javascript版本——构建乘阶数组
题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)题解:方法一:双重循环。function multipl...原创 2020-02-28 22:30:23 · 149 阅读 · 0 评论 -
剑指Offer刷题Javascript版——数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。题解方法一:首先将数组进行排序,然后检查相邻的数是否相同。function duplicate(numbers, ...原创 2020-02-27 22:50:39 · 193 阅读 · 0 评论 -
剑指offer1 javascript版本——二维数组中的查找
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题解:一、暴力法遍历数组中所有元素,查找是否包含该元素。首先我们来了解一下JS中一个m*n二维数组的m和n如何获取。二维数组的行数:array.length;二维数组的列数:array...原创 2020-02-26 21:40:43 · 296 阅读 · 0 评论 -
剑指offer2 javascript版本——替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题解:分析1:这是一道考查正则的题目,首先写出一个匹配所有空格的正则,然后将其替换为%20。function replaceSpace(str){ // write code here reg = /\s...原创 2020-02-26 21:56:56 · 163 阅读 · 0 评论