【LeetCode】Sama的个人记录_33

 

【Q111】(ez) 二叉树的最小深度
 
给定一个二叉树,找出其最小深度。
 
最小深度是从根节点到 最近叶子节点 的最短路径上的节点数量。
 
说明: 叶子节点是指没有子节点的节点。
 
示例:
给定二叉树 [3,9,20,null,null,15,7],

    3   
   / \  
  9  20
    /  \   
   15   7 

返回它的最小深度 2.

class Solution {
     
   /*
	* 这是一道陷阱题————求深度时,最终的节点一定是【叶子节点】
	* 	1
	*    \
	* 	  2
	* 如果不分类讨论的话,从"1"处直接向左递归返回了0,这是一个最小值,但不合法(要求必须是叶子节点)
	*/
    public int minDepth(TreeNode root) {
     
        if(root == null){
     
            return 0;
        }
        if(root.left == null && root.right == null){
     	// 无左右节点,是叶子节点
            return 1;
        }
        if(root.left != null && root.right == null){
     	// 只有左树
            return minDepth(root.left) + 1;
        }
        if(root.left == null && root.right != null){
     	// 只有右树
            return minDepth(root.right) + 1;
        }
        if(root.left != null && root.right != null){
     	// 左右树都有
            return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
        }
        return 0;
    }
}

 

【Q201】(md) 数字范围按位与
 
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。
 
示例:

输入: [5,7]
输出: 4

class Solution {
     
    /**
     *【位运算】如果对二进制和位运算比较敏感的话,其实很简单。
     * 难在想不到。
     */
    public int rangeBitwiseAnd(int m, int n) {
     
        int count = 0;
        while(m != n){
     
            m >>= 1;
            n >>= 1;
            count++;
        }
        return m <<= count;
    }
}

【LeetCode】Sama的个人记录_33_第1张图片

【Q459】(ez) 重复的子字符串
 
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
 
示例 :

输入: “abab”

输出: True

class Solution {
     
    /**
     * 如果s串满足条件,则该串×2后,去掉两头的字符,得到的字符应该包含s本身
     */
    public boolean repeatedSubstringPattern(String s) {
     
        return (s + s).substring(1, 2 * s.length() - 1).indexOf(s) != -1;
    }
}

本页的题目均算得上是"ez"难度,但并不常规。有的是陷阱题,有的需要零批次。

 
 

 

 

 

 

 

 

 

 

 
 

 

 

Qs from https://leetcode-cn.com
♥ loli suki
♠ end

你可能感兴趣的:(Leetcode,算法,leetcode)