数据结构与算法(十)

124 阅读1分钟

1、 剑指 Offer 10- II. 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2 输出:2

示例 2:

输入:n = 7 输出:21

示例 3:

输入:n = 0 输出:1 提示:

0 <= n <= 100

class Solution {
    public int numWays(int n) {
        int x = 1, y = 2, sum = 0;
        for(int i = 2; i <= n; i++){
            sum = (x + y) % 1000000007 ;
            x = y;
            y = sum;
        }
        return x;
    }
}

2、 剑指 Offer 32 - II. 从上到下打印二叉树 II

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

  例如: 给定二叉树: [3,9,20,null,null,15,7],

image.png

返回其层次遍历结果:

[ [3], [9,20], [15,7] ]  

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
         List<List<Integer>> lists = new ArrayList<>();
        if(root == null)
            return lists;
        Queue<TreeNode> queue = new LinkedList();

        queue.offer(root);

       

        while(!queue.isEmpty()){
            int size = queue.size();
            List<Integer> list = new LinkedList<>();

            for (int i = 0; i < size; i++) {
                TreeNode poll = queue.poll();
                list.add(poll.val);
                if(poll.left != null){
                    queue.add(poll.left);
                }
                if(poll.right != null){
                    queue.add(poll.right);
                }
                
            }
            lists.add(list);
        }
        return lists;
    }
}

3、 剑指 Offer 39. 数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2  

限制:

1 <= 数组长度 <= 50000

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }
}

4、 剑指 Offer 27. 二叉树的镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

例如输入:

image.png

镜像输出:

image.png

示例 1:

输入: root = [4,2,7,1,3,6,9]
输出: [4,7,2,9,6,3,1]
class Solution {

    public TreeNode mirrorTree(TreeNode root){
        if(root != null){
            TreeNode left = mirrorTree(root.left);
            TreeNode right = mirrorTree(root.right);
            TreeNode t = left;
            root.left = right;
            root.right = t;
        }
        return root;
    }
}