Java实现矩形覆盖

题目描述

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

不知道为什么,拿到这个题,我觉得好像似曾相识....

难道不是青蛙跳台阶的另一种说法?


分析题目:

首先,2*1或者是2*n,长为2是确定的。

如果横着放,那么长度2被覆盖了,宽度n-1

如果竖着放,长度2只被覆盖了一半,宽度n-2,所以只要是竖着放,必须是两个一起竖着放。

从覆盖的角度,也就是n逐渐减少的过程来看,这里的递推公式应该是:

f(n)=f(n-1)+f(n-2)

所以第一版我用的是递归,AC了。但是时间复杂度和空间复杂度都比较高。


换一个思路,把题目想象成,用小矩形拼凑出大矩形,就是n++的思路,

那么,

f(1)=1

f(2)=2

f(3)=f(2)+f(1)

f(4)=f(3)+f(2)

.....

f(n)=f(n-1)+f(n-2)

这样就可以用for循环来做了。

AC代码如下,23ms:

public class Solution {
    public int RectCover(int target) {
 		if (target <= 0) {  
            return 0;  
        }  
        if (target == 1) {  
            return 1;  
        }  
        if (target == 2) {  
            return 2;  
        }  
        
        
       // int sum=RectCover(target-1)+RectCover(target-2);
       // return sum;
         int first = 1;  
        int second = 2;  
        int third = 0;  
        for(int i = 3; i <= target; i++) {  
            third = first + second;  
            first = second;  
            second = third;  
        }  
        return third;  
        
        
    }
}






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用Graphics2D类来进行绘图操作。Graphics2D类继承自Graphics类,提供了更多的图形绘制方法和属性。下面是一个简单的Java绘图示例: ``` import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JFrame; import javax.swing.JPanel; public class DrawExample extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.RED); g2d.setStroke(new BasicStroke(2)); g2d.drawLine(50, 50, 100, 100); g2d.setColor(Color.BLUE); g2d.setStroke(new BasicStroke(1)); g2d.drawRect(150, 50, 50, 50); g2d.setColor(Color.GREEN); g2d.fillOval(250, 50, 50, 50); } public static void main(String[] args) { JFrame frame = new JFrame("Draw Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new DrawExample()); frame.setSize(400, 200); frame.setLocationRelativeTo(null); frame.setVisible(true); } } ``` 在这个示例中,我们创建了一个继承自JPanel的类DrawExample,并覆盖了它的paintComponent()方法来进行绘图操作。我们使用Graphics2D类的setRenderingHint()方法来设置抗锯齿效果,然后使用setColor()方法设置绘图颜色,setStroke()方法设置线条宽度,drawLine()方法绘制直线,drawRect()方法绘制矩形,fillOval()方法绘制椭圆。最后,我们创建了一个JFrame并将DrawExample添加到其中,以显示绘制的图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值