LeetCode:<剑指offer>刷题思路分享

ps:因为我对js 比较熟悉,所以解题都是用js实现

1、数组重复数字
解决思路:
一、使用对象存储值
二、遍历数组,如果遇上已存储的值就返回结果

2、二维数组中的查找
解决思路:
遍历数组中的所有元素,找到是否存在。
时间复杂度是 O(N^2),空间复杂度是 O(1)

3、替换空格
解决思路:
一、使用 js的replcae() 函数
二、匹配 /[ ]/ ,替换为 “%20”

4、从尾到头打印链表
解决思路:
一、后进先出的访问顺序,用栈比较简单,先把元素压到栈里
二、使用js的reverse() 输出

5、重建二叉树
解决思路:获取根节点区分左右子树,对于左子树的前序和中序采取同样的操作

6、用两个栈实现队列
解题思路:题目说使用两个栈实现队列: 栈, 后进先出, 表示只能使用 push 和 pop 方法

7、旋转数组的最小数字
解题思路:
原数组递增排列,那么该数组的所有片段都是递增排列,第一个不符合递增排列的元素就是旋转截断点,也就是最小值点。如果没有,就返回第一个元素

8、反转链表
解题思路:
利用3个变量在循环过程中记录最后3种信息
cur游标,一直往后循环,最后会为null
prev记录前一个节点
oldNext,变更方向时,需要先用oldNext记住改变前的next节点,否则无法向后循环

9、二叉树的镜像
解决思路:
一、特例化:针对root为null的情况,直接返回root
二、初始化:定义一个辅助栈,将根节点入栈
三、递归:判断栈不为空,则逐步出栈,将节点的左右节点互换,实现镜像

10、顺时针打印矩阵
解题思路:
剥洋葱,一层一层从矩阵中剥掉

11、字符串的排列
解题思路:
我用一个哈希表将字符串中的字母以及出现次数存储起来
然后用递归进行字符串组合,并将结果存进数组中返回

12、数组中出现次数超过一半的数字
解题思路:
排序 找到中位数
如果有小数 四舍
避免只输入一个数字 五入的话就会变为undefined

13、1~n 整数中 1 出现的次数
解题思路:
计算具体位数中有几个1。从最高位开始算起,一直到个位

14、翻转单词顺序
解题思路:
一、遍历字符串
二、以下一字符为空格或不存在为依据,获取每个单词,从头部添加至新字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值