2019字节跳动面试时手撕代码题(持续更新~)

1. N 阶乘末尾0的个数。

输入描述:

输入为一行,n(1 ≤ n ≤ 1000)

输出描述:

输出一个整数,即题目所求
解法:要判断末尾有几个0就是判断可以整除几次10。10的因子有5和2,而在0~9之间5的倍数只有一个,2的倍数相对较多,所以本题也就转换成了求N阶乘中有几个5的倍数。
也就是每多出来一个5,阶乘末尾就会多出来一个0,这样n / 5就能统计完第一层5的个数,依次处理,就能统计出来所有5的个数。同一个思想两种写法。

 题解:

  要判断末尾有几个0就是判断可以整除几次10。10的因子有5和2,而在0~9之间5的倍数只有一个,2的倍数相对较多,所以本题也就转换成了求N阶乘中有几个5的倍数。也就是每多出来一个5,阶乘末尾就会多出来一个0,这样n / 5就能统计完第一层5的个数,依次处理,就能统计出来所有5的个数。同一个思想两种写法。

参考代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n;
 6     cin>>n;
 7     int count = 0;
 8     while(n)
 9     {
10         n /= 5;     //算出当前数字中可以匹配5(5和5的倍数)的个数
11         count += n; //累加之
12     }
13     cout<<count;
14     return 0;
15 }
C++
public class Main {
    public int calcuZero(int n) {
        int count = 0;
        for (int i = 1; i <= n; i++) {
            int cur = i;
            //如果因数中有一个5那么乘积中就会有一个0,所以计算每一个i中因数5的个数
            while (cur % 5 == 0) {
                count++;
                cur /= 5;
            }
        }
        return count;
    }
    public static void main(String[] args) {
        System.out.println(new Main().calcuZero(30));
    }
}
Java

 2.对称二叉树

题解:

  判断一个数是否为镜像对称:先判断根,在判断左右子树。如果左右子树都为空那就是,如果左右子树不是同时为空那就不是

当左右子树都存在的时候,判断他们的值是否相等,如果相等那么久递归的对他们的字节点判断(左边的左=右边的右;左边的右==右边的左)

 参考代码:

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode *root) {
        if (!root)
            return true;
        return Symmetric(root->left, root->right);
    }
    bool Symmetric(TreeNode *left, TreeNode *right){
        if (!left && !right)
            return true;
        if (!left || !right)
            return false;
        if (left->val == right->val){
            return (Symmetric(left->left, right->right) && Symmetric(right->left, left->right));
        }
        return false;
    }
};
C++
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) 
    {
        if(root==null) return true;

        return work(root.left,root.right);
    }

    public boolean work(TreeNode l,TreeNode r)
    {
        if(l==null && r==null) return true;
        if(l==null || r==null) return false;

        if(l.val==r.val)
        {
            return work(l.left,r.right) && work(l.right,r.left);
        }
        else return false;
    }
}
Java

未完待续~

猜你喜欢

转载自www.cnblogs.com/csushl/p/12069926.html