(1)给定一个n层的阶梯,一个人爬楼梯,每次走1步,或者2步,总共多少走法
(2)输出斐波那契数列前n位数
package com.example.dzx.datastrctet;
import java.util.HashMap;
import java.util.Map;
/**
* @author 500007
* @ClassName:
* @Description: 1.爬楼梯,每次走1步,或者2步,总共多少走法
* @Description: 2.斐波那契数列
* @date 2022年04月22日 11:10:59
*/
public class Solution {
private Map integerIntegerMap = new HashMap();
/**
* 递归
* @param n
* @return
*/
public int climbStairs1(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
return climbStairs1(n - 1) + climbStairs1(n - 2);
}
/**
* 带有map缓存的递归(防止重复计算)
* @param n
* @return
*/
public int climbStairs2(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
if (integerIntegerMap.get(n) != null) {
return integerIntegerMap.get(n);
} else {
int res = climbStairs2(n - 1) + climbStairs2(n - 2);
integerIntegerMap.put(n, res);
return res;
}
}
/**
* for循环输出法
* @param n
* @return
*/
public int climbStairs3(int n) {
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
int prepre = 1;
int pre = 2;
int res = 0;
for (int i = 3; i <= n; i++) {
//当前数=前前数+前数
res = prepre + pre;
//前数赋值给前前数
prepre = pre;
//当前数复制给前数
pre = res;
}
return res;
}
// 1 2 3 5 8 13 21
public static void main(String[] args) {
int res1 = new Solution().climbStairs1(7);
System.out.println(res1);
int res2 = new Solution().climbStairs2(7);
System.out.println(res2);
int res3 = new Solution().climbStairs3(7);
System.out.println(res3);
}
}
运行代码,输出如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)