当前位置: 首页 > news >正文

【强训】Day07

努力经营当下,直至未来明朗!

文章目录

  • 一、选择
  • 二、编程
    • 1. Fibonacci数列
    • 2. 合法括号序列判断 ☆
  • 答案
    • 1. 选择
    • 2. 编程


普通小孩也要热爱生活!

一、选择

  1. Math.round(11.5) 等于()

A 11
B 11.5
C 12
D 12.5

  1. 以下对继承的描述错误的是()

A Java中的继承允许一个子类继承多个父类
B 父类更具有通用性,子类更具体
C Java中的继承存在着传递性
D 当实例化子类时会递归调用父类中的构造方法

  1. 以下 _____ 不是 Object 类的方法。

A clone()
B finalize()
C toString()
D hasNext()


二、编程

1. Fibonacci数列

Fibonacci数列

给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N,求最少需要多少步可以变为Fibonacci数


2. 合法括号序列判断 ☆

合法括号序列判断

给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。


答案

1. 选择

  1. Math.round();其实就类似于“四舍五入”,但是对于正数是“四舍五入”,对于负数的话就是“五舍六入”。(一切向大了看起。

如: ① Math.round(11.5) == 12;
② Math.round(-11.5) == -11;
③ Math.round(-11.6) == -12;

故:选C

  1. ① 注:java中不支持类的多继承,只有单继承;类可以实现多个接口,接口对接口可以是多继承
    ② 在类前加一个修饰符final后,不可以再被继承!(String就是用final修饰的,不能被继承)
    ③ 子类构造方法中默认有super();
    ④ 注意super、的三种使用方式
    ⑤ 同一个父类可以被多个子类继承,但是一个子类只能继承一个父类。
    ⑥ 注意:初始化的顺序父子静态、父实例、子实例
    ⑦ 参考:继承

故:选A

  1. ① Object类的方法:
    2
    ② Object中没有hasNext() 方式,这个方法是迭代器Iterator中的
    ③ Object没有copy方法,但是有clone()方法, 用于创建并返回该对象的一个副本
    ④ 注:getClass是一个final方法,用于返回运行时类。
    ⑤ finalize方法:该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

故:选D

  1. java 语言使用的字符码集是:Unicode

2. 编程

  1. Fibonacci数列

1)思路

① Fibonacci数列:第一项第二项是1,此后F(n)=F(n-1)+F(n-2)。 (可以递归 or 迭代√ )
② 先找到距离N最近的两个Fibonacci数,这两个数分别取自距离N的最近的左边一个数L和右边一个数R,然后通过min(N - L, R - N)找到最小步数。
③ 最小步数也就是与最近的Fibonacci数相差最小值(一步只能+1 or -1)。
④ 要同时找左边和右边,也就是L<=N<=R.
⑤ 注意计算时候的循环条件!!(一旦找到大于N的就停止,此时L也可以拿到)

2) 代码

import java.util.Scanner;

// 再写一次:尤其要注意循环条件(也就是:找L与R的过程!!)
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()) {
            int n = in.nextInt();
            // 使用迭代计算Fibonacci
            // 注意初始值,否则可能会出现负数的情况
            int f1 = 1;
            int f2 = 1;
            int f3 = 2;
            while (n > f3) {
                // 开始进行变换继续计算Fibonacci
                f1 = f2;
                f2 = f3;
                f3 = f1+f2;
            }
            // 出来说明:n<=f3,此时:
            // f2 < n <=f3
            // 然后计算f2、f3与n的差值,取最小值就是步数
            int step = Math.min(n-f2,f3-n);
            System.out.println(step);
        }
    }
}


  1. 合法括号序列判断 ☆

1)思路

① 本题考察的其实是栈!
② 用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。
③ 简单讲:栈中放左括号,遇到有右括号出栈继续,否则就是不匹配!
④ 原理:栈是“先进后出”结构的,而括号是最近的进行匹配。
⑤ 一定不要忘记条件判断!
⑥ 最后匹配完成后栈应该是空!

2)代码

import java.util.*;

public class Parenthesis {
    public boolean chkParenthesis(String A, int n) {
        // 一定不要忘记进行条件判断
        if(n%2 != 0) {
            // 如果括号是单数,根本没有判断的必要
            return false;
        }

        // 栈是先进后出,括号是最近的匹配
        Stack<Character> stack = new Stack<>();

        // 进行遍历:入栈和匹配出栈操作
        for (int i = 0; i < A.length(); i++) {
            char ch = A.charAt(i);
            if(ch == '(') {
                // 左括号进行入栈操作
                stack.push(ch);
            } else if(ch == ')'){
                // 如果是右括号
                // 栈不为空时才可以进行出栈操作,一旦栈为空就是false
                if(stack.isEmpty()) {
                    return false;
                }
                stack.pop();
            } else {
                // 除了()之外的字符
                return false;
            }
        }
        // 最后判断的条件:匹配完成后栈应该是空
        return stack.isEmpty();
    }
}

yyy

相关文章:

  • 苏州公司建设网站首页/网络营销名词解释
  • 网站宽度一般是多少/企业管理培训课程视频
  • 高端网站网站设计/怎么自己做一个网站平台
  • 成都大型网站建设公司排名/怎样打小广告最有效
  • 上海爆发大规模抗议/页面seo优化
  • 徐州网站建设的特点/站长统计幸福宝2022年排行榜
  • aloam学习笔记(四)
  • 托普云农在创业板IPO过会:拟募资约3亿元,前三季度利润下滑8%
  • Vector和ArrayList对比
  • SH-PEG-Silane巯基-聚乙二醇-硅烷试剂简介Silane-PEG-SH
  • Unity 使用OpenXR和XR Interaction Toolkit 开发 HTCVive(Vive Cosmos)
  • 盘点2022年度A站UE神作top
  • docker搭建 nginx+mysql+php-fpm开发环境
  • mybatis之动态SQL常见标签的使用
  • Vue3——第十五章(计算属性:computed)
  • 【IoT】硬件选型:如何正确区分电子线的端子型号?
  • opencv的图像基本操作(基于jupyter Notebook)
  • 【持续更新】VSCode常见快捷键总结