剑指 Offer 64. 求1+2+…+n
这题看评论区真的绝了,都是人才,各个说话都好听,我看到个还有用异常来结束的就离谱。
这题用了&&当左边为false,右边不执行的原理。
class Solution { public int sumNums(int n) { boolean flag = n > 1 && (n += sumNums(n - 1)) > 0; return n; } }
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
因为是二叉搜索树,所以当前值大于两个值时,应该往左子树找,
当前值小于两个值时,应该往右子树找。
class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(p.val<root.val && q.val < root.val) { return lowestCommonAncestor(root.left,p,q); }else if(p.val>root.val && q.val >root.val){ return lowestCommonAncestor(root.right,p,q); }else{ return root; } } }
剑指 Offer 68 - II. 二叉树的最近公共祖先
开头判断是否是相同或者空的情况,然后设两个结点来遍历两边的字数,如果左边为空,则返回右边,
反之,则返回左边,两者都不满足,则返回root。
class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root==null || root.val==p.val || root.val ==q.val) return root; TreeNode left = lowestCommonAncestor(root.left,p,q); TreeNode right = lowestCommonAncestor(root.right,p,q); if(left==null) return right; if(right==null) return left; return root; } }