随笔分类 -  LeetCode

摘要:题目描述:按照规定,把字符串解码,具体示例见 "题目链接" 思路:使用两个栈分别存储数字和字母 注意1: 数字是多位的话,要处理后入数字栈 注意2: 出栈时过程中产生的组合后的字符串要继续入字母栈 注意3: 记得字母出栈的时候字符要逆序组合成字符串 注意4: 不用字符串而用字母栈的原因是字符串的 j 阅读全文
posted @ 2018-05-16 22:55 潇湘旧友 阅读(1355) 评论(0) 推荐(0) 编辑
摘要:"Python LeetCode" 是一个使用 Python 语言解决 LeetCode 问题的代码库,库有以下几个方面需要注意: 所有题目都是 AC 的; 按照题目顺序,每 50 个放在一个目录下,方便查看; 水平所限,无法保证每个题目都是使用的最好的算法; 对于链表和二叉树等结构,会配备测试代码 阅读全文
posted @ 2018-03-25 23:29 潇湘旧友 阅读(7517) 评论(0) 推荐(2) 编辑
摘要:题目描述:用先序遍历的方式把二叉树转换成字符串,其中结点用括号分割,具体示例见 "题目链接" 思路: 1. 先序遍历,先把根结点的值转化成字符串,然后递归的把左右子树的值转化成字符串 2. 把1中的根结点和左右子结点的字符串连接起来就是结果,其中需要注意: 如果右子树存在值,左子树无论有没有值,都需 阅读全文
posted @ 2018-01-01 17:24 潇湘旧友 阅读(331) 评论(0) 推荐(0) 编辑
摘要:思路:二分法,时间复杂度o(logn) python class Solution(object): def nextGreatestLetter(self, letters, target): """ :type letters: List[str] :type target: str :rtyp 阅读全文
posted @ 2017-12-26 22:39 潇湘旧友 阅读(514) 评论(0) 推荐(0) 编辑
摘要:题目描述:把k个排序的链表组成的列表合并成一个排序的链表 思路: 1. 使用堆排序,遍历列表,把每个列表中链表的头指针的值和头指针本身作为一个元素放在堆中; 2. 第一步中遍历完列表后,此时堆中最多会有n个元素,n是列表的长度; 3. 当堆不为空,取出堆中的最小值,然后把该值的指针指向下一个元素,并 阅读全文
posted @ 2017-12-21 23:07 潇湘旧友 阅读(313) 评论(0) 推荐(0) 编辑
摘要:题目描述:在一个旋转数组中查找给定的值,其中旋转数组中不含重复值; 思路: 1. 第一遍二分遍历,找到数组中最小值的索引; 2. 第二遍分别对最小值左右两边的数组进行二分查找; python class Solution(object): def find_min(self, nums): if n 阅读全文
posted @ 2017-12-14 00:13 潇湘旧友 阅读(243) 评论(0) 推荐(0) 编辑
摘要:题目描述:把一个二维数组顺时针旋转90度; 思路: 1. 对于数组每一圈进行旋转,使用m控制圈数; 2. 每一圈的四个元素顺时针替换,可以直接使用Python的解包,使用k控制每一圈的具体元素; python class Solution(object): def rotate(self, matr 阅读全文
posted @ 2017-12-09 22:34 潇湘旧友 阅读(629) 评论(0) 推荐(0) 编辑
摘要:题目描述:给出一个由字符串组成的数组,把数组中字符串的组成字母相同的部分放在一个数组中,并把组合后的数组输出; 思路: 1. 使用一个字典,键为数组中字符串排序后的部分,值为排序后相同的字符串组成的列表; 2. 遍历数组完成后,返回字典的值就可以了。 阅读全文
posted @ 2017-12-09 19:20 潇湘旧友 阅读(313) 评论(0) 推荐(0) 编辑
摘要:题目描述:求一个字符串的不含重复字符的最长连续子串的长度; 思路: 1. 使用一个哈希表保存字符出现的位置; 2. 使用left和right分别表示子串的最左和最右字符的下标; 3. 遍历字符串,如果当前字符在哈希表中并且当前字符在哈希中的位置大于left,表明left和right之间存在和righ 阅读全文
posted @ 2017-12-07 23:01 潇湘旧友 阅读(435) 评论(0) 推荐(0) 编辑
摘要:题目描述:输入两个非空单链表,链表的每个结点的值是一个1位数整数,两个链表都是一个大整数每一位的逆序排序,求这两个链表代表的整数的和的链表值; 思路: 1. 分别遍历两个链表,转化成相应的整数,求和后把结果每一位转化成单链表即可; 阅读全文
posted @ 2017-12-06 22:37 潇湘旧友 阅读(472) 评论(0) 推荐(0) 编辑
摘要:题目描述:求出数组中等于目标值的两个数的索引,假定肯定存在两个数并且同一个索引上的数不能用两次。 思路: 1. 用空间换时间,使用一个字典存储已经遍历的数字的索引,如果新遍历的数字和target的差值在字典中,则就是结果。 阅读全文
posted @ 2017-12-04 22:12 潇湘旧友 阅读(253) 评论(0) 推荐(0) 编辑
摘要:题目描述:给定一个由时间字符组成的列表,找出任意两个时间之间最小的差值。 思路: 1. 把给定的链表排序,并且在排序的同时把60进制的时间转化成十进制整数; 2. 遍历排序的数组,求出两个相邻值之间的差值; 3. 求出首尾两个值之间的差值。 python class Solution(object) 阅读全文
posted @ 2017-12-03 12:35 潇湘旧友 阅读(567) 评论(0) 推荐(0) 编辑
摘要:题目描述:给定一个单链表,写一个函数把它分成k个单链表。分割成的k个单链表中,两两之间长度差不超过1,允许为空。分成的k个链表中,顺序要和原先的保持一致,比如说每个单链表有3个结点,则第一个单链表的结点为输入链表的前三个结点,依次类推。 思路: 1. 第一次遍历单链表,求出链表的长度length; 阅读全文
posted @ 2017-12-01 22:03 潇湘旧友 阅读(673) 评论(0) 推荐(0) 编辑
摘要:leetcode 724. Find Pivot Index 题目描述:在数组中找到一个值,使得该值两边所有值的和相等。如果值存在,返回该值的索引,否则返回 1 思路:遍历两遍数组,第一遍求出数组的和,第二遍开始,保存左边所有的值的和,当左边值的和的2倍加上当前值等于数组和时,就是要找的索引。时间复 阅读全文
posted @ 2017-11-28 21:34 潇湘旧友 阅读(803) 评论(0) 推荐(0) 编辑
摘要:leetcode 226. Invert Binary Tree 倒置二叉树 思路:分别倒置左边和右边的结点,然后把根结点的左右指针分别指向右左倒置后返回的根结点。 阅读全文
posted @ 2017-11-27 21:41 潇湘旧友 阅读(368) 评论(0) 推荐(0) 编辑
摘要:思路:循环最小值到最大值,对于每一个值,判断每一位是否能被该值整除即可,思路比较简单。 阅读全文
posted @ 2017-11-24 22:08 潇湘旧友 阅读(1111) 评论(0) 推荐(0) 编辑
摘要:leetcode 145. Binary Tree Postorder Traversal 思路一: 1. 使用一个栈stack保存经过的根结点,另一个栈flag保存每个结点的右子树是否遍历; 2. 如果根结点存在,结点入栈,并把结点的右子树遍历结果置为0,代表没遍历; 3. 把root指向左子树; 阅读全文
posted @ 2017-11-23 23:02 潇湘旧友 阅读(2114) 评论(0) 推荐(0) 编辑
摘要:思路: 1. 使用列表保存结果; 2. 使用栈(列表实现)存储结点; 3. 当根结点存在,保存结果,根结点入栈; 4. 将根结点指向左子树; 5. 根结点不存在,栈顶元素出栈,并将根结点指向栈顶元素的右子树; 6. 重复步骤3 6,直到栈空。 LeetCode: 144. Binary Tree P 阅读全文
posted @ 2017-11-19 23:19 潇湘旧友 阅读(2863) 评论(0) 推荐(0) 编辑
摘要:思路: 1. 使用一个栈保存结点(列表实现); 2. 如果结点存在,入栈,然后将当前指针指向左子树,直到为空; 3. 当前结点不存在,则出栈栈顶元素,并把当前指针指向栈顶元素的右子树; 4. 栈不为空,循环2、3部。 代码如下,解决了leetcode94. Binary Tree Inorder T 阅读全文
posted @ 2017-11-15 22:18 潇湘旧友 阅读(3229) 评论(1) 推荐(0) 编辑
摘要:在LeetCode上做题时,有很多二叉树相关题目的测试数据是用列表给出的,提交的时候有时会出现一些数据通不过,这就需要在本地调试,因此需要使用列表来构建二叉树,方便自己调试。LeetCode上二叉树结点的定义如下: 使用列表构建二叉树,以及二叉树的层次遍历,先序遍历,中序遍历,后序遍历的代码如下所示 阅读全文
posted @ 2017-10-24 17:57 潇湘旧友 阅读(2948) 评论(0) 推荐(0) 编辑