LC 题型记录

参考的这个分类刷的题:LeetCode 题目总结/分类 - GyyZyp - 博客园,但是我原本看的不是他的,找不到了以前的,找到,再改,但是分类是一样的。

简单数学:(已完)

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):从入口到出口,一共有多少种路径可走,(思路简单明确,值得暂看一遍,和爬楼梯很相似)

老鼠走迷宫(m:):62是只能走两个方向,老鼠能走四个方向,这个时候应该用递归;要大胆的想象--(1条消息) Java与算法之(5) - 老鼠走迷宫(深度优先算法)_分享知识、分享进步-CSDN博客icon-default.png?t=L9C2https://blog.csdn.net/autfish/article/details/52447805

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):实现两个整数的整除,不利用*,/,这道题的关键是一个:应该想负数的方向转换,应为它     的范围比正数的范围大,还有就是自己不敢用迭代了,其实应该尝试的。

动态规划(已完,哈哈哈,每一个都能进行哪些动作)是顺序执行,并且记录之前的结果,递归是倒序执行

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

188(h:买卖股票的最佳时机 IV):给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。值得学习

120(m:Triangle):无序的三角形矩阵,从顶端,只能往相邻的方向走,如何走加权值最小,及最小路径。

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):交错字符串,典型的动态规划;

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

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

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

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

1884:鸡蛋掉落,两枚鸡蛋   n层楼;面试常见的是100楼层扔鸡蛋问题:100层楼扔两个鸡蛋的问题_清风自来-CSDN博客_100层楼2个鸡蛋 两个鸡蛋扔k次最多能测多少层。100层楼2个鸡蛋,如何得知鸡蛋能承受几层的撞击 - 霓裳依旧 - 博客园

887:鸡蛋k枚鸡蛋,n层楼; 这两道题都是典型的动态规划问题;两个解答写在一起,值的一看

最大和子矩阵问题:最大子矩阵和_Yuwen's Hero-CSDN博客_最大和子矩阵 感觉有部分是错的,他这个是适用于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)二叉树的最小深度和最大深度,还是遍历。写到一篇里面了。最大深度遍历,其实怎么都要遍历完所有的,但是最小深度遍历,完全不需要,可以利用广度优先遍历;111题更值得思考一些

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)从下到上的层次遍历,本质就是插入的时候改变下顺序。

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)两个节点的最近公共祖先。这道题,值得再看一遍,自己想麻烦了,递归很nice

字符串(最不喜欢的)

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)字符串相乘。这种题真的给了一种新的思路。

图、并查集

130 (中等)被围绕的区域,图的连通性,深度遍历,广度遍历,并查集,数据结构真的忘光了。

链表

21(e)合并两个有序链表,这个简单

23(h)合并K个升序链表,这个比较巧

汉诺塔问题:(easy)思想是需要考虑n-1个由A放到B,然后第n个由A放到C,再然后n-1,由B放到C;递归也就能实现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值