2022-3-6 剑指offer day24

题1:

JZ71 跳台阶扩展问题

描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
 
数据范围:1 \le n \le 201n20
进阶:空间复杂度 O(1)O(1) , 时间复杂度 O(1)O(1)
 
 1 public class Solution {
 2     public int jumpFloorII(int target) {
 3         int[] ans=new int[21];
 4         ans[0]=1;
 5         for (int i=1;i<=target;i++) {
 6             int sum=0;
 7             for (int j=0;j<i;j++) {
 8                 sum+=ans[j];
 9             }
10             ans[i]=sum;
11         }
12         return ans[target];
13     }
14 }

思路:f_n=f_0+f_1+...+f_n-1,动态规划。

 

题2:

JZ70 矩形覆盖

 

 

描述

我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,从同一个方向看总共有多少种不同的方法?
 
数据范围:0 \le n \le 38 \0n38 
进阶:空间复杂度 O(1)\O(1)  ,时间复杂度 O(n)\O(n) 
 
注意:约定 n == 0 时,输出 0
 
比如n=3时,2*3的矩形块有3种不同的覆盖方法(从同一个方向看):

输入描述:

2*1的小矩形的总个数n

返回值描述:

覆盖一个2*n的大矩形总共有多少种不同的方法(从同一个方向看)
 
 1 public class Solution {
 2     public int rectCover(int target) {
 3         if (target==0) return 0;
 4         if (target==1) return 1;
 5         if (target==2) return 2;
 6         int f1=1,f2=2;
 7         int ans=0;
 8         for (int i=3;i<=target;i++) {
 9             ans=f1+f2;
10             f1=f2;
11             f2=ans;
12         }
13         return ans;
14     }
15 }

思路:动态规划,可以转化为f_n=f_n-1+f_n-2

posted on 2022-03-06 14:14  阿ming  阅读(21)  评论(0编辑  收藏  举报

导航