算法模板
public void recur(int level, int param) { //terminator if (level > MAX_LEVEL) { //process result return ; } //process current logic process(level, param); //drill down recur(level:level + 1,param); //restore current status}
Homework
刷题记录
class Solution { public int maxDepth(TreeNode root) { if(root == null){ return 0; } return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1; }}
public TreeNode invertTree(TreeNode root) { if(root == null){ return root; } TreeNode newLeft = invertTree(root.right); TreeNode newRight = invertTree(root.left); root.left = newLeft; root.right = newRight; return root; }
public boolean isValidBST(TreeNode root) { return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE); } public boolean isValidBST(TreeNode node,long lower,long upper) { if(node == null){ return true; } if(node.val <= lower || node.val >= upper){ return false; } return isValidBST(node.left,lower,node.val) && isValidBST(node.right,node.val,upper); }
private List<String> ans; public List<String> generateParenthesis(int n) { ans = new ArrayList<>(); _travel(0,0,n,""); return ans; } private void _travel(int left, int right, int n, String s) { if(left==n&&right==n){ ans.add(s); return; } if(left<n){ _travel(left+1,right,n,s+"("); } if(right<left){ _travel(left,right+1,n,s+")"); } }
private List<List<Integer>> res = null;
private List<Integer> temp = null;
public List<List<Integer>> combine(int n, int k) {
res = new ArrayList<>();
temp = new ArrayList<>();
dfs(1, n, k);
return res;
}
private void dfs(int cur, int n, int k) {
if ((temp.size() + (n - cur + 1)) < k) {
return;
}
if (temp.size() == k) {
res.add(new ArrayList<>(temp));
return;
}
temp.add(cur);
dfs(cur + 1, n, k);
temp.remove(temp.size() - 1);
dfs(cur + 1, n, k);
}