2022年2月18日
在你面前有一个n阶的楼梯,你一步智能上1阶或2阶。请问,当N=11时,你可以采用多少中不同的方式爬完这个楼梯()?当N=9时呢?
- A、11
- B、144
- C、55
- D、89
答案:B、C
分析:这是一个动态规划的算法题目。首先,你一步只能上1阶或者2阶,那么当N=11时:
a(11) = a(10) + a(9) = 144
a(10) = a(9) + a(8) = 89
a(9) = a(8) + a(7) = 55
…
a(2) = 2
a(1) = 1
代码:
public class SolutionBy {
public static int a(int n){
if(n == 1){
return 1;
}else if(n == 2){
return 2;
}else {
return a(n - 1) + a(n - 2);
}
}
public static void main(String[] args) {
System.out.println(a(11) + " " + a(9));
}
}
下列说法正确的是()
- A、在类方法中可用this来调用本类的类方法
- B、在类方法中调用本类的类方法时可以直接调用
- C、在类方法中只能调用本类中的类方法
- D、在类方法中绝对不能调用实例方法
先要理解什么是类的方法,所谓类的方法就是指类中用static修饰的方法(非static修饰为实例方法),比如main方法,那么可以main方法为例,可直接调用其他类的方法,必须通过实例调用实例方法,this关键字不是这么使用的。this关键字指的是当前对象,类方法依附于类而不是对象。
在Java中重写方法应该遵循规则的包括()
- A、访问修饰符一定要大于重写方法的访问修饰符
- B、可以有不同的访问修饰符
- C、参数类标必须完全与被重写的方法相同
- D、必须具有不同的参数列表
方法重写原则:两同两小一大原则
- 1、两同:方法名和参数类标相同
- 2、两小:返回值或生命异常比父类小(或相同)
- 3、一大:访问修饰符比父类的大(或相同)
下列哪些描述是正确的是:()
public class Test {
public static class A {
private B ref;
public void setB(B b) {
ref = b;
}
}
public static Class B {
private A ref;
public void setA(A a) {
ref = a;
}
}
public static void main(String args[]) {
…
start();
….
}
public static void start() { A a = new A();
B b = new B();
a.setB(b);
b = null; //
a = null;
…
}
}
- A、b = null 执行后b可以被垃圾回收
- B、a = null执行后b可以被垃圾回收
- C、a = null执行后a可以被垃圾回收
- D、a,b必须在整个程序结束后才能被垃圾回收
- E、类A和类B在设计上有循环引用,会导致内存泄露
- F、a, b 必须在start方法执行完毕才能被垃圾回收
正确答案:B、C