暑假結束啦,真是個Sad story~java
又有好長時間沒有好好刷題了,實在是悲痛欲絕,罄竹難書!那麼來吧,先來兩道炒雞簡單的題練練手,熟悉一下。node
1、LeetCode104:二叉樹的最大深度python
我相信考研或者大二的同窗對這道題實在是太熟悉了吧(不要問我怎麼知道的。。。)數組
二叉樹嘛,遞歸就對了,直接上代碼:app
/* Definition for a binary tree node.*/ public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } class Solution { public int maxDepth(TreeNode root) { int res = 0; if(root == null) return res; res++; int leftDepth = res + maxDepth(root.left); int rightDepth = res + maxDepth(root.right); return Math.max(leftDepth,rightDepth); } }
2、LeetCode20:有效的括號
ide
這道題還挺有趣的,是由於我第一時間沒有寫出來,參考了網上大佬的解答才搞定,而後就深深地陷入了沉思:都是九年義務教育,這些人怎麼能夠這麼秀?!函數
分析思路:括號匹配,我首先想到利用棧來實現。有左括號確定有右括號,不然返回false。那麼把輸入的字符串先放到字符數組中,開始遍歷:讀取到一個左括號後,把與它匹配的右括號放在棧中,這樣的話相同類型的左括號所匹配的右括號與棧頂元素是同樣的,只要數組中讀到右括號時,與棧頂元素比較,若是同樣則說明匹配成功,不然錯誤。當數組遍歷完成,而棧中元素爲空時(由於匹配成功一個就彈出一個,全部括號都匹配成功後棧中全部元素都被彈出),說明函數返回true。舉個栗子:spa
好比字符串爲:[ ( { } ) ]遞歸
1.讀到 ‘[’,入棧 ‘]’圖片
2.讀到‘(’ ,入棧‘)’
3.讀到‘{’,入棧‘}’
4.讀到‘}’,此時棧頂元素爲‘}’,與棧頂元素匹配成功,彈出棧頂元素,第一組括號匹配完成
5.讀到‘)’,此時棧頂元素爲‘)’,與棧頂元素匹配成功,彈出,第二組匹配完成
6.讀到‘]’,此時棧頂元素爲‘]’,匹配成功,彈出,第三組匹配完成
7.棧爲空,函數返回true
Java實現
class Solution { public boolean isValid(String s) { char[] sc = s.toCharArray(); Stack<Character> stak = new Stack<Character>(); for(char c : sc){ if(c == '(') stak.push(')'); else if(c == '{') stak.push('}'); else if(c == '[') stak.push(']'); else if(stak.isEmpty() || stak.pop() != c) return false; } return stak.isEmpty(); } }
Python實現
與Java的分析思路同樣同樣的
class Solution: def isValid(self, s): """ :type s: str :rtype: bool """ stack = [] dict = {"]":"[", "}":"{", ")":"("} for char in s: if char in dict.values(): stack.append(char) elif char in dict.keys(): if stack == [] or dict[char] != stack.pop(): return False else: return False return stack == []