暑假结束啦,真是个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 == []