LC 题型记录

参考的这个分类刷的题:https://www.cnblogs.com/xiaozhuyang/p/6113726.html,但是我原本看的不是他的,找不到了以前的,找到,再改,但是分类是一样的。

简单数学:(已完)

12题 ( m : Integer to Roman ) : 把数字变成罗马字符。

13题(easy:roman to integer):把罗马字符串,变成整型;就是简单的数学逻辑,罗马数字5相关的倍数,都是里程碑

70题(easy:climbing  stairs):爬楼梯,顺序比逆序的时间代价低,空间代价也低。

1 题(easy:two sum):问数组里是否有两个数相加,等于目标值,若果有,返回下坐标,这道题的关键之处在于,map的应      用,key:和下坐标,关键在于能否想得到。

2 题(m:add two numbers):给两个list,其中就是432的逆序:2-3-4;返回的结果也是逆序;

7题 (e:reverse Integer):取整数的相反数

8题(m: string to integer): 字符串,变为整形

9题(m:Palindrome Number):判断是否为回文数字,取余和整除

14题(e:Longest Common Prefix):返回字符串数组中,共有的最长子串

56题(m:Merge Intervals):合并相交的区间

60题(m:Permutation Sequence):小于n数字的全排列,返回第K个;123,132,213,231.....

62题(m:Unique Paths):从入口到出口,一共有多少种路径可走,(思路简单明确,值得暂看一遍,和爬楼梯很相似)

65题(h:Valid Number):判断输入的字符串是不是有效的数字,用的正则(不喜欢这一类的题)

118题(e:Pascal's Triangle):杨辉三角

119题(e:Pascal's Triangle2):输出第K行的杨辉三角。

 

 

二分查找

33题(m:Search in Rotated Sorted Array):在旋转的数组中,搜索制定数字,返回位置;特殊的二分查找

34题(m:Search for a Range):再允许重复有序的数组中,查找某个数字,返回起始位置;特殊的二分查找,改变条件,查   找两次。

35题(e:Search Insert Position):典型的二分查找,有则返回位置,无则插入。

69题(e:Sqrt(x)):开方x;改变条件的二分查找;

74题(m:search-a-2d-matrix):在一个有序的矩阵里,搜索特定的数据,返回坐标。

 

 

 

越界

50(m:pow(x,n)):x的n次方;n很大的时候怎么办,n很小的时候怎么办,负数呢,数学的平方减半;

29(m:  Divide Two Integers):实现两个整数的整除,不利用*,/,这道题的关键是一个:应该想负数的方向转换,应为它     的范围比正数的范围大,还有就是自己不敢用迭代了,其实应该尝试的。

 

动态规划(已完,哈哈哈)

120(m:Triangle):无序的三角形矩阵,从顶端,只能往相邻的方向走,如何走加权值最小,及最小路径,这道题我觉得值得一看吧,毕竟我从上往下走的时间,比从下往上的时间要长,还有的就是,空间限制在O(n),n为行数。倒着不用考虑越界的问题,这和正负数最大值应该选择负数的范围一样的。以后记得考虑。

78(m:Subsets):求集合的所有子集,集合是不重复的。

90(m:SubsetII):求集合的所有子集,集合是有重复元素的。所以首先是排序的问题。

72(h : Edit distance):求一个字符通过增加、删除、替换变成另一个字符的一共有几步。这道题和求两个字符串的最长子序列原理很像。和最小便编辑代价很像,只是比那个稍微简单了一点儿。

139(m:word break):求这个字符串,是否由字典中的字段的一个或者多个拼成的。这道题对我来说,是难度比较大的题,因为我没有思路,只用的自己的递归,一点也不知道,该如何跑到动态规划上,这中间模糊的一道墙让我很生气。很值得回顾。

140(h : word break):就是上道题所有结果的输出,这道题我的思路局限了,有必要再看一遍,哎。输出所有的结果本来就是一个费时,费内存的事情,你本来就该缓存那些已经处理过的,但是我还局限于上一个求出一种结果的思路,本来简单的题,愣是被自己弄的复杂了,这道题,有必要再思考一下。

96(m:Unique Binary Search Trees):就是给一个数字n,求从1到n所构成的二叉树有多少种,嗯,其实思路就是从1到n依次做头,那么其实每个头的左边有那些数字,右边有哪些数字,是固定的,就是依次的递归,刚开始自己想复杂了,其实忘记了二叉树的规则。

63(m:Unique Paths II):同62题目很相似,就是增加了一个障碍,打算把代码提交到已有的62中。

87(h:Scramble String): 这道题我知道为什么那么多人给差评了,因为题目要求就没说明,我还以为是从中间劈开的二叉树呢,结果可以从任意位置分开的二叉树,我还在那考虑mid的取值,错了,我还以为mid取两种情况呢,结果确实可以从任何位置分开,但是这道题除了这个还是满有价值的,起码,我卡住了一段时间,其实就是你分成二叉树,就是里两种选择,交换不交换,就应当就这个去考虑,值得看一遍。

131 (m : Palindrome Partitioning):把一个字符串分割成若干部分,使得每一部分都是回文串,输出所有的这样的分割,这道题,我刚开始就是规规距的判断,但是也没有超时,但是时间运行的并不快。后来才知道回文串也对应这一个图,这次长知识了。

132(h:Palindrome Partitioning II):还是满足上一道题的要求,但是输出最小分割数。这道题再有我的方法就超时了。还是蛮有趣的。嘿嘿,喜欢。

97(h:Interleaving String):交错字符串,这道题自己一直超时,就想着,图表的话怎么办呢,我原本想着建立l3*l3大小的矩阵,但是这样的矩阵不好算呀,不知道咋办好呢,结果是按照(l1+1)*(l2+1)的矩阵算的,这样的好理解,也可以利用空间压缩方法,变成min(l1,l2)+1;

115(h: Distinct Subsequences):输出s1中子字符串为s2的数量,这道题还可以,关键是图表的正确,然后空间压缩。

91(m : decode-ways):解码方法,这道题看着不难,但是分条件的情况太多了,动动笔头就变得简单了,哼。

64(m:最小路径和) :这道题和62题很想,就是多了一个代价,其他没有什么。

89(m: 格雷编码):从0位开始考虑,然后1位是在0位的基础上,2位也是,写几个就明白了,也不难,这道题坑的一点是在0位的输出【0】上。

100楼层扔鸡蛋问题:https://blog.csdn.net/qq_39098813/article/details/82623109 两个鸡蛋扔k次最多能测多少层。https://www.cnblogs.com/yangai/p/5391533.html

最大和子矩阵问题:https://blog.csdn.net/beiyeqingteng/article/details/7056687 感觉有部分是错的,他这个是适用于N*N的矩阵

 

回溯:(完结,哈哈哈)

77(m:Combinations):组合,给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

22(m:Generate Parentheses):括号生成,给n=3,((())),(()()),等等,这道题,我被困住了,嗯,但是在过程中还是有收获的。值得学习。

39(m:Combination Sum):组合总和,一个集合中,有多少种数字组合的和是等于目标数的,这道题,就是两个选择,要或者不要。

40(m:Combination Sum II):组合总和II,一个集合中,有多少种数字组合的和是等于目标数的,但是每个数字只能使用一次。

37 (h:Sudoku Solver):解数独,(9*9)的,这道题,我只是给出了,自己的解法,没有做别的,因为不想看,哈哈,不过有好的办法,麻烦告知。

51 (h:N-Queens) N 皇后问题,皇后问题就是横、竖、斜对角都不可以重复,不知到简单的办法是什么,真希望有人给我讲一下,这个是输出所有的排列结果。

52(h:N-QueensII) N 皇后问题,不过这次是输出一共有多少种。

17(m:Letter Combinations of a Phone Number)电话字母的翻译,输出各种组合。不难,关键是字典的结构。还是数组,比较方便,不要想当然的认为是map。

 

贪心:(已完,不明白贪心呀)

121(e:Best Time to Buy and Sell Stock)最好的买与卖,这道题很简单,但是可以根据j永远大于i的关系,减少循环次数。

122(e:Best Time to Buy and Sell Stock II)股票买卖的最好时机2,这道题没有限制循环次数,对于数学来说是简单,就是累加,但是我把它想复杂了,哈哈,上一道题,就是数组的最大差值,知道题就是累计差值。真的是数学。

123(h:Best Time to Buy and Sell Stock III)股票买卖的最好时机3,这道题就是限制购买次数,两次,求两次能获得最大利益值,其实就是分而治之。

55 (m:Jump Game)跳跃游戏,还是i和j的关系,我增加了一个数组变量,别人只是用了一个字段,时间就少了很多,加油。这道题求得是是不是可达最后一个

45 (h :Jump Game II)跳跃游戏2,这个求的到达最后一步最少需要跳几步。这道题还是蛮有意思的,需要画图的。值得学习。

53 (e: Maximum Subarray)最大子序和,这道题还算是一道数学题吧,求出一个序列中子序列最大的一个。

76 (h: Minimum Window Substring)最小覆盖子串,最小移动窗口,这道题喜欢,没有想到的办法,值得再看,哈哈

84 (h: Largest Rectangle in Histogram)柱状图图中最大的巨型,这道题的关键是:左右边界,以及左右边界如何利用上一次得到的结果。

85 (h: Maximal Rectangle)矩阵中最大的巨型,是上一题的升级呀,关键还是左右边界的确定。值得再看,哈哈

3 (m: Longest Substring Without Repeating Characters)最长没有重复的字串,其实这道题的关键就是来回移动左边界,右边界。

 

分冶与递归(已完)

95(m:Unique Binary Search Trees II)给定一个数字n,求这n个数字,所构成的二叉树,并输出这个二叉树,返回树的list,这道题和96题一样的,不过一个求多少种,一个是输出所有的情况。

93 (m:Restore IP Addresses) 给定一个字符串,输出所有可能的ip地址,我在想分冶是因为明确就几条路吗??比如说这道题就是3条路,一个字符,两个字符,三个字符,上一道题,也是明确就左右子树。

46 (m: Permutations) 全排列,给定不重复的几个数字,输出他们所有的排列。这道题的最简单的思路就是,我后面的在前面的基础上,从左到右依次换位置插入。

47(m:PermutationsII)全排列2,给定的几个数字是重复的,输出他们所有的排列,刚开始还觉得和90题蛮像的,但还是不一样的,受到46题的影响很容易走偏,其实人家就是简单的要活着不要,还有认为的加上规则,对于重复的数字,原本后面的一定要在原本前面的后面,对于重复的不能换位置。

108(e : Convert Sorted Array to Binary Search Tree) 将一个数组,转换为平衡二叉树,这个倒是没什么难的。108,109写一起了

109(m:Convert Sorted List to Binary Search Tree)将一个链表结构的TreeList转换为pi平衡二叉树,这个反而容易受上一个的影响。其实关键是递归:head永远是从第一个开始向后移动的,这一步用的很巧,如果,将list转换成array反而费时间。

4(h: Median of Two Sorted Arrays)两个排序数组的中位数,因为时间复杂度的限制为log2(m+n)所以一定会想到和mid有关。

98(m:Validate Binary Search Tree) 判断一个树是否为二叉搜索树(二叉排序树),这里限制左右边界,不是简单的Integer.MaxValue,而是Long.MaxValue。当然也可以用中序排序,两个都可以。哈哈,还有逻辑符号,我也不经常使用。

 

94、144、145(m、m、h)中序、前序、后序遍历的递归算法和非递归算法,我这六个算法写到一篇博客里面。发现遍历的递归算法和非递归算法时间上没有差别。可能时间粒度比较大。

100(e:Same Tree) 判断是不是同一个树,看一下遍历是不是是一样的就可以。

129(m:Sum Root to Leaf Numbers)根到叶子结点之和,还是遍历的问题。先序遍历。

113(m:Path Sum II) 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。还是遍历。

104、111(e)二叉树的最小深度和最大深度,还是遍历。写到一篇里面了。

105(m:Construct Binary Tree from Preorder and Inorder Traversal)根据前序、中序遍历构建二叉树。虽然思路很简单,但是改进方法还是有意思的。

106 (m:Construct Binary Tree from Inorder and Postorder Traversal)根据中序和后序构建二叉树。

102(m: Binary Tree Level Order Traversal)层次遍历二叉树,和103写到一起。

103  (m: Binary Tree Zigzag Level Order Traversal) Z型层次遍历二叉树,我把正常的层次遍历也写到这篇。

107(e: Binary Tree Level Order Traversal II)从下到上的层次遍历,肯定要知道深度的,我不明白这个咋就变成easy的难度了。

101(e:Symmetric Tree)是否为对称二叉树,易错

124 (h: Binary Tree Maximum Path Sum) 二叉树中的最大路径和,这道题的思路我觉得是基于53题的基础上的。

110(e:Balanced Binary Tree)是不是平衡二叉树。这道题,我想的有点复杂了。哈哈,人家不用tag,直接用-1,就好了。

99(h:Recover Binary Search Tree)调整搜索二叉树的两个错误节点,其实应该想到,中序遍历正常的搜索二叉树,得到的是一个有序的二叉树。所以应当利用这一点。

114(m:Flatten Binary Tree to Linked List)把一个二叉树转换成一个链表,虽然我不知道这样出题的意义所在,但是这个题目z真心的让人理解错误,这道题其实关键就是右子树移到左子树,然后,左子树再移到右子树上。我刚开始就理解错了,不过这道题的递归算法,我觉得很精妙。

116、117(m:Populating Next Right Pointers in Each Node)填充同一层次兄弟节点,多种方法。

236(m:Lowest Common Ancestor of a Binary Tree)两个节点的最近公共祖先。这道题,先序遍历,这个想到了,但是自己还是想麻烦了,还有一点bu'm不明白,我操作的不是地址吗,为什么还需要得到value值呢。这一点就是不明白。

 

字符串(最不喜欢的)

38(h:Count and Say)计数和说。题意是n=1时输出字符串1;n=2时,数上次字符串中的数值个数,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。依次类推,写个countAndSay(n)函数返回字符串。这道题真不容易理解,解决办法倒是没什么。

71(m:Simplify Path)简化一个Unix风格下的文件的绝对路径,我发现,他们的题意真的不好懂。

43(m:Multiply Strings)字符串相乘。这种题真的给了一种新的思路。

你可能感兴趣的:(leetcode)