【强训】Day07

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


普通小孩也要热爱生活!

一、选择

  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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值