LeetCode20&104

暑假結束啦,真是個Sad story~java

又有好長時間沒有好好刷題了,實在是悲痛欲絕,罄竹難書!那麼來吧,先來兩道炒雞簡單的題練練手,熟悉一下。node


1、LeetCode104:二叉樹的最大深度python

圖片.png

我相信考研或者大二的同窗對這道題實在是太熟悉了吧(不要問我怎麼知道的。。。)數組

二叉樹嘛,遞歸就對了,直接上代碼: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

圖片.png

這道題還挺有趣的,是由於我第一時間沒有寫出來,參考了網上大佬的解答才搞定,而後就深深地陷入了沉思:都是九年義務教育,這些人怎麼能夠這麼秀?!函數

分析思路:括號匹配,我首先想到利用棧來實現。有左括號確定有右括號,不然返回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 == []
本站公眾號
   歡迎關注本站公眾號,獲取更多信息