對于一個編程屌絲的我堵第,編程能力太有限,好在最近開始刷LeetCode假抄,發(fā)現(xiàn)每得到一個AC都無比高興怎栽,于此丽猬,記錄下我從中的一些收獲,還望各位大神分享你們的經驗熏瞄。持續(xù)更新中...
1.Two Sum 和 3Sum
處理數(shù)組類求和問題脚祟,首先要做的就是對數(shù)組進行排序(直接引用庫里面的排序方法),便于后面的處理强饮,可以大大降低時間代價由桌;
一般情況下,數(shù)組求和問題都可以采用夾必準則邮丰,從頭和尾開始往中間移動行您,但是有些情況需要返回初始數(shù)組下標的時候,那么就要考慮重新開辟空間記錄初始數(shù)組的下標位置剪廉,所以面對這種情況娃循,可以考慮借助其他數(shù)據結構來解決問題,2Sum就可以采用HashMap,更好斗蒋。
2. Rotate Array
關于數(shù)組的反轉捌斧,我得到的啟發(fā)就是,不斷利用反轉泉沾,解決問題捞蚂。
3.NP問題
NP問題,一般解決問題的方法就是遞歸和非遞歸跷究。我個人比較容易理解非遞歸方法洞难。
4.Happy Number
求一個數(shù)的各位的平方的和,比如:167:1的平方+6的平方+7的平方=86
思路:不斷循環(huán)揭朝,循環(huán)終止條件:要么達到Int最大值,要么出現(xiàn)了各位數(shù)和已經重復出現(xiàn)的情況色冀。利用HashSet潭袱,因為HashSet里面不允許有重復的元素。
5.Valid Anagram
這題其實很簡單锋恬,但是如果沒有想到屯换,可能會做得有些復雜。
首先想到的就要應該是對字符串中的每個字符進行排序(因為每個字符都對應一個code值)与学,然后判斷排序后的是否相等即可彤悔。
String類中有很多方法,可以把字符串進行各種轉化索守,由此就會想到轉換成一個字符數(shù)組晕窑。而Arrays提供了對數(shù)組進行排序的函數(shù),直接調用即可卵佛。最后返回兩個字符串是否相等杨赤。
注意敞斋,不能返回sArr==tArr,這樣返回永遠都為false疾牲,因為這樣比較的是兩個字符串對象的地址(引用)植捎,我們要比較的是字符串里面的值,所以需要用equals函數(shù)阳柔,這里還需要借用String類的valueOf函數(shù)焰枢。
還有,不能使用return (sArr.toString()).equals(tArr.toString());進行判斷舌剂,因為在數(shù)組中(sArr和tArr是數(shù)組)沒有對toString()進行重寫济锄,此時調用toString返回的是C@15db9742類似這種值,永遠返回是false架诞。而String的valueOf(char[] data)拟淮,返回char數(shù)組參數(shù)的字符串表示形式,調用這個方法才正確谴忧。
Arrays的 static?toString(char[] a) 很泊,Returns a string representation of the contents of the specified array.