1.力扣每日一题:
爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例:输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。 - 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
假设 f(x)表示 x = n时的爬楼梯方法数
分析题目:先进行枚举后发现规律,n=0 n=1 f(x)=1; n=2 f(x)=2; n=3 f(x)=3; n=4 f(x)=5;
可以发现它满足斐波那契数列的规律 f(x) = f(x-1) + f(x-2) 换一种理解也就是爬最后一节楼梯时,总方法数为最后爬1阶加上最后爬两阶的和
动态规划:滚动数组
class Solution {
public int climbStairs(int n) {
int p = 0, q = 0, r = 1;
for (int i = 1; i <= n; ++i) {
p = q;
q = r;
r = p + q;
}
return r;
}
}
直接利用斐波那契数列的计算公式
class Solution {
public int climbStairs(int n) {
double sqrt_5 = Math.sqrt(5);
double fib_n = Math.pow((1 + sqrt_5) / 2, n + 1) - Math.pow((1 - sqrt_5) / 2,n + 1);
return (int)(fib_n / sqrt_5);
}
}
2.java学习
java学习笔记:
1.System.out.println(i++); 先执行print i 后i++;
2.定义变量的关键字 var
3.在if的使用中注意他的顺序执行,当我们要进行数据分层时,尽可能先从小范围开始处理
eg:if(a>60) System.out.println(“老年人”); if(a>40&&!(a>60)) System.out.println(“中年人”);
if(a>20 && !(a>40 && !(a>60))) System.out.println(“青年人”); if中包含else的隐藏条件
另一种if else if 写法类似
4.接收用户键盘输入:java.util.Scanner s = new java.util.Scanner(System.in);
接受整数:int i = s.nextInt();
接受字符串:String str = s.next();
5.switch语句:支持的值:int,String 当传入byte,short,char类型时自动类型转换为int
long类型时 会报错,从long转换到int可能会有损失 (int)x 强制转换
default不是必须的 当所有case值都无法对应时执行default语句
写了一个程序 输入数字判断星期几
public class switchdayjudge
{
public static void main(String [] args)
{
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入[1~7]的整数");
int num = s.nextInt();
switch(num){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
}
}
}