我的LeetCode之旅

对于一个编程屌丝的我,编程能力太有限,好在最近开始刷LeetCode,发现每得到一个AC都无比高兴,于此,记录下我从中的一些收获,还望各位大神分享你们的经验。持续更新中...

1.Two Sum 和 3Sum

我的LeetCode之旅_第1张图片
Fig1


我的LeetCode之旅_第2张图片
Fig2

处理数组类求和问题,首先要做的就是对数组进行排序(直接引用库里面的排序方法),便于后面的处理,可以大大降低时间代价;

一般情况下,数组求和问题都可以采用夹必准则,从头和尾开始往中间移动,但是有些情况需要返回初始数组下标的时候,那么就要考虑重新开辟空间记录初始数组的下标位置,所以面对这种情况,可以考虑借助其他数据结构来解决问题,2Sum就可以采用HashMap,更好。


2. Rotate Array

Fig3

关于数组的反转,我得到的启发就是,不断利用反转,解决问题。

3.NP问题

我的LeetCode之旅_第3张图片
Fig4

NP问题,一般解决问题的方法就是递归和非递归。我个人比较容易理解非递归方法。


4.Happy Number

求一个数的各位的平方的和,比如:167:1的平方+6的平方+7的平方=86

思路:不断循环,循环终止条件:要么达到Int最大值,要么出现了各位数和已经重复出现的情况。利用HashSet,因为HashSet里面不允许有重复的元素。

我的LeetCode之旅_第4张图片
Fig5

5.Valid Anagram


我的LeetCode之旅_第5张图片
Fig6

这题其实很简单,但是如果没有想到,可能会做得有些复杂。

我的LeetCode之旅_第6张图片
Fig7

首先想到的就要应该是对字符串中的每个字符进行排序(因为每个字符都对应一个code值),然后判断排序后的是否相等即可。

String类中有很多方法,可以把字符串进行各种转化,由此就会想到转换成一个字符数组。而Arrays提供了对数组进行排序的函数,直接调用即可。最后返回两个字符串是否相等。

注意,不能返回sArr==tArr,这样返回永远都为false,因为这样比较的是两个字符串对象的地址(引用),我们要比较的是字符串里面的值,所以需要用equals函数,这里还需要借用String类的valueOf函数。

还有,不能使用return (sArr.toString()).equals(tArr.toString());进行判断,因为在数组中(sArr和tArr是数组)没有对toString()进行重写,此时调用toString返回的是C@15db9742类似这种值,永远返回是false。而String的valueOf(char[] data),返回char数组参数的字符串表示形式,调用这个方法才正确。

Arrays的 static toString(char[] a) ,Returns a string representation of the contents of the specified array.


我的LeetCode之旅_第7张图片


我的LeetCode之旅_第8张图片

你可能感兴趣的:(我的LeetCode之旅)