列表

详情


NC268. 矩形覆盖

描述

我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,从同一个方向看总共有多少不同的方法?

数据范围:
进阶:空间复杂度 ,时间复杂度

注意:约定 n == 0 时,输出 0

比如n=3时,2*3的矩形块有3种不同的覆盖方法(从同一个方向看):

输入描述

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

输出描述

覆盖一个2*n的大矩形总共有多少种不同的方法(从同一个方向看)

示例1

输入:

0

输出:

0

示例2

输入:

1

输出:

1

示例3

输入:

4

输出:

5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Rust 解法, 执行用时: 2ms, 内存消耗: 232KB, 提交时间: 2021-03-21

struct Solution{

}

fn fib(n: i32, i: i32, a: i32, b: i32) -> i32 {
    if i == n {return a;}
    else {return fib(n, i+1, b, a+b);}
}

impl Solution {
    fn new() -> Self {
        Solution{}
    }

    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    * 
        * @param number int整型 
        * @return int整型
    */
    pub fn rectCover(&self, number: i32) -> i32 {
        // write code here
        if number == 0 {return 0;}
        fib(number, 0, 1, 1)
    }
}

C++ 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2021-03-12

class Solution {
public:
    
    int rectCover(int n) {
        vector<int> dp(n+1,0);
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=n;++i)
        {
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp.back();
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-05-25

class Solution {
public:
    int rectCover(int number) {
        vector<int> fib(number+1,0);
        fib[1]=1;
        fib[2]=2;
        for(int i=3;i<=number;i++)
        {
            fib[i]=fib[i-1]+fib[i-2];
        }
        return fib[number];
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-04-18

class Solution {
public:
    int rectCover(int number) {
       //变相的斐波那契数列
//        if(number==1) return 1;
//         if(number==2) return 2;
//         return rectCover(number-1)+rectCover(number-2);
//     }
        int a=1;
        int b=2;
        int c=0;
        if(number==1) return a;
        if(number==2) return b;
        for(int i=3;i<=number;i++){
            c=a+b;
            a=b;
            b=c;
        }
        return c;
            
            
        }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2021-03-20

class Solution {
public:
    int rectCover(int number) {
        if(number == 1 || number ==2 || number ==0)
            return number;
        int a =1,b =2,c;
        for(int i =2;i<number;i++){
            c = a+b;
            a = b;
            b = c;
        }
        return c;
    }
};

上一题