LeetCode20&104

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

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


一、LeetCode104:二叉樹的最大深度

圖片.png

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

二叉樹嘛,遞歸就對了,直接上代碼:

/* 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);
    }
}


二、LeetCode20:有效的括號

圖片.png

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

分析思路:括號匹配,我首先想到利用棧來實現。有左括號肯定有右括號,否則返回false。那麼把輸入的字符串先放到字符數組中,開始遍歷:讀取到一個左括號後,把與它匹配的右括號放在棧中,這樣的話相同類型的左括號所匹配的右括號與棧頂元素是一樣的,只要數組中讀到右括號時,與棧頂元素比較,如果一樣則說明匹配成功,否則錯誤。當數組遍歷完成,而棧中元素爲空時(因爲匹配成功一個就彈出一個,所有括號都匹配成功後棧中所有元素都被彈出),說明函數返回true。舉個栗子:

比如字符串爲:[ ( { } ) ]

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 == []







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章