Java随记5-编程-爬楼梯

1.关于抽象类和接口叙述正确的

抽象类

特点:

1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
6,抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰

关键字使用注意:

抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。

接口

1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。
7,接口可以继承接口,用extends

2.导出类调用基类的构造器必须用到的关键字:(其实就是子类调用父类的构造器)

使用super()关键字,且放在子类构造函数的第一行

3.初始化过程是这样的(服了,第2遍记录了,初始化过程)

1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 

2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 

3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;

4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 

(1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C
(2)super(“B”);表示调用父类的构造方法,不调用父类的无参构造函数,输出B
(3) System.out.print(“B”);

4.

 /** * String split 这个方法默认返回一个数组,
  * 如果没有找到分隔符,
  * 会把整个字符串当成一个长度为1的字符串数组 
  * 返回到结果, 所以此处结果就是1 */
  private static void testSpringSpilte(){

        String str = "12,3";

        String str2 = "123";

        System.out.print(str.split(",").length);

        System.out.print(str2.split(",").length);

    }

}

结果  2  1
str.split(",")方法是把str字符串根据分割符","划分成一个字符串数组,
如果str字符串中找不到分隔符",",则把整个str字符串放入字符串数组的第一个元素。
因此str.split(",").length=1。

5.在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯(),当N=9时呢呢()?——Java 爬楼梯

你需要爬11楼的时候,你倒回去一步只能待在第10楼或者第9楼。换句话说就是到达第9楼的方法次数加上第10楼的方法次数。

如果你待在第10楼,就得待在第9楼或者第8楼

如果你待在第9楼,就得待在第8楼或者第7楼

......

如果你待在第3楼,就得待在第1楼或者第2楼

爬1楼一种方法,

爬2楼两种方法。

爬3楼就是爬1楼方法次数加2楼的方法次数。
用数学表达就是:

a(11=a(10+a(9=144

a(10=a(9+a(8=89

a(9=a(8+a(7=55

a(8=a(7+a(6=34

a(7=a(6+a(5=21

a(6=a(5+a(4=13

a(5=a(4+a(3=8

a(4=a(3+a(2=5

a(3=a(2+a(1=3

a(2=2

a(1=1

思想: 爬到第n阶的方法数等于第n-1阶方法数与第n-2阶楼梯的方法数之和。 f(n) = f(n-1) + f(n-2);

1
class Solution {
    public int climbStairs(int n) {
        if(n == 0 || n == 1 || n == 2)
    return n;
    return climbStairs(n-1) + climbStairs(n-2);
    }
}

法2

参考斐波那契数方法

class Solution {
    public int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        int first = 1;
        int second = 2;
        for (int i = 3; i <= n; i++) {
            int third = first + second;
            first = second;
            second = third;
        }
        return second;
    }
}
3
参考动态规划法

class Solution {
    public int climbStairs(int n) {
        if (n == 1) {
            return 1;
        }
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

巳时桥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值