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 == []
本站公众号
   欢迎关注本站公众号,获取更多信息