暑假结束啦,真是个Sad story~

又有好长时间没有好好刷题了,实在是悲痛欲绝,罄竹难书!那么来吧,先来两道炒鸡简单的题练练手,熟悉一下。


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

LeetCode20&104_第1张图片

我相信考研或者大二的同学对这道题实在是太熟悉了吧(不要问我怎么知道的。。。)

二叉树嘛,递归就对了,直接上代码:

/* 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:有效的括号

LeetCode20&104_第2张图片

这道题还挺有趣的,是因为我第一时间没有写出来,参考了网上大佬的解答才搞定,然后就深深地陷入了沉思:都是九年义务教育,这些人怎么可以这么秀?!

分析思路:括号匹配,我首先想到利用栈来实现。有左括号肯定有右括号,否则返回false。那么把输入的字符串先放到字符数组中,开始遍历:读取到一个左括号后,把与它匹配的右括号放在栈中,这样的话相同类型的左括号所匹配的右括号与栈顶元素是一样的,只要数组中读到右括号时,与栈顶元素比较,如果一样则说明匹配成功,否则错误。当数组遍历完成,而栈中元素为空时(因为匹配成功一个就弹出一个,所有括号都匹配成功后栈中所有元素都被弹出),说明函数返回true。举个栗子:

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

1.读到 ‘[’,入栈 ‘]’

2.读到‘(’ ,入栈‘)’

3.读到‘{’,入栈‘}’

4.读到‘}’,此时栈顶元素为‘}’,与栈顶元素匹配成功,弹出栈顶元素,第一组括号匹配完成

5.读到‘)’,此时栈顶元素为‘)’,与栈顶元素匹配成功,弹出,第二组匹配完成

6.读到‘]’,此时栈顶元素为‘]’,匹配成功,弹出,第三组匹配完成

7.栈为空,函数返回true


Java实现

class Solution {
    public boolean isValid(String s) {
        char[] sc = s.toCharArray();
        Stack stak = new Stack();
        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 == []