摘要: Leetcode上新加入了剑指 offer板块,最近准备这些题重新做一遍,温故知新。后续会将所有的解题思路和代码收录到这里,并将这些题做分类,便于以后查阅。 数组 剑指 offer——数组篇 字符串 剑指 offer——字符串篇 链表、栈与队列 剑指 offer——链表、栈与队列篇 树与图 剑指 o 阅读全文
posted @ 2020-07-19 20:15 MoonLeo2017 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 43. 1~n整数中1出现的次数 题意:面试题43. 1~n整数中1出现的次数 思路:找规律。每一位digit上的1出现的次数只与:它前面的数字high、它后面的数字low、当前位的因数$10^$相关。 分情况讨论: 1)第i位上的数字 == 0。1~n中,这一位上1出现的次数只与高位有关。(例如2 阅读全文
posted @ 2020-07-19 20:01 MoonLeo2017 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 05. 替换空格 题意:面试题05. 替换空格 思路:题目要求将空格字符‘ ’替换为‘20%’,即将一个字符替换为三个。我们可以先遍历一遍字符串,统计出字符串中空格的个数count,根据这个数字可以计算出: \[ 替换之后字串的长度 = 原字串长度 + 2 * count \] 然后从后向前,依次将 阅读全文
posted @ 2020-07-19 20:00 MoonLeo2017 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 15. 二进制中1的个数 题意:面试题15. 二进制中1的个数 思路:使用位操作,每次计算给定数字的某一个二进制位上是否为1。由于1的二进制表示中,只有末位为1,其余位均为0,所以将给定的数与1进行按位与操作,即可判断其末位上的二进制位是否为1。 public class Solution { // 阅读全文
posted @ 2020-07-19 19:59 MoonLeo2017 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 10-I. 斐波拉契数列 题意:面试题10- I. 斐波那契数列 思路:最基础的动态规划题。数据量比较大的时候不能使用递归,会报StackOverFlow Exception,最优的方式是迭代计算。 class Solution { public int fib(int n) { if (n <= 阅读全文
posted @ 2020-07-19 19:57 MoonLeo2017 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 3. 数组中重复的数字 题意:详见面试题03. 数组中重复的数字 思路1:使用Hash表。遍历整个数组,在访问到某个数字时,先在Hash表中查询是否已包含此数字,如果包含,返回此数字即可;如果不包含,则将数字加到Hash表中,继续遍历下一个数字。 class Solution { public in 阅读全文
posted @ 2020-07-19 19:55 MoonLeo2017 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 7. 重建二叉树 题意:面试题07. 重建二叉树 思路:前序遍历的顺序是“根-左-右”,中序遍历的顺序是“左-中-右”。 那么,对于整棵树前序遍历的结果,第一个值r一定是树的根结点。如果在中序遍历的结果中找到r的位置index,那么index左边的子数组就都是根结点r的左子树的中序遍历结果,inde 阅读全文
posted @ 2020-07-19 19:53 MoonLeo2017 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 6. 从尾到头打印链表 题意:面试题06. 从尾到头打印链表 思路:首先遍历一遍链表得到链表的长度,使用此长度初始化数组。然后再从头到尾遍历一遍链表,并将遍历得到的数字从后往前插入数组。 class Solution { public int[] reversePrint(ListNode head 阅读全文
posted @ 2020-07-19 10:21 MoonLeo2017 阅读(175) 评论(0) 推荐(0) 编辑