Java图像编程之:Graphics2D

一、介绍

1、Java图像编程的核心类

  1. BufferedImage:用于表示图像的类,可以进行像素级的操作。
  2. Image:表示图像的抽象类,是所有图像类的基类。
  3. ImageIcon:用于显示图像的类,可以将图像嵌入到Swing组件中。
  4. ImageIO:用于读取和写入图像文件的类。
  5. Graphics:用于进行图像绘制操作的抽象类,可以绘制直线、矩形、椭圆等图形。
  6. Graphics2D:继承自Graphics类,提供了更多的绘制方法和功能,可以进行更高级的图像绘制操作。
  7. Color:用于表示颜色的类,可以设置图像的颜色。
  8. Font:用于表示字体的类,可以设置图像的字体样式。

2、Graphics2D介绍

java.awt.Graphics2D 是 Java 编程语言中的一个类,它是java.awt.Graphics类的子类。它提供了一系列用于绘制图形和处理图形操作的方法。Graphics2D 类是 Java 2D API 的一部分,它允许开发人员在图形界面应用程序中创建复杂的图形和图像效果。

Graphics2D 类提供了一些强大的绘图功能,如绘制线条、矩形、椭圆、多边形等。它还支持图像的平移、旋转、缩放和剪切等变换操作。此外,Graphics2D 还可以设置绘图属性,如颜色、字体和渐变等,以实现更丰富的图形效果。

要使用 Graphics2D 类,您需要先创建一个 Graphics2D 对象。通常,您可以通过调用 java.awt.Graphics 类的 create 方法来获取 Graphics2D 对象。一旦获取了 Graphics2D 对象,您就可以使用它的方法来绘制和操作图形。

例如,您可以使用 Graphics2D 的 drawLine 方法绘制一条直线,使用 drawRect 方法绘制一个矩形,使用 drawOval 方法绘制一个椭圆等等。除了基本形状,您还可以使用 Graphics2D 的 fill 方法来填充图形内部,以创建实心的图形效果。

Graphics2D 类还支持文本绘制功能。您可以使用 drawString 方法在图形上绘制文本,并通过设置字体、颜色等属性来调整文本的外观。

总之,Graphics2D 类提供了丰富的图形绘制和操作功能,使开发人员能够创建各种各样的图形效果。无论是绘制简单的图形还是实现复杂的图像处理,Graphics2D 都是一个强大而灵活的工具。

3、Graphics2D 和 Graphics的区别

java.awt.Graphics2D 和 java.awt.Graphics 是 Java AWT(Abstract Window Toolkit)中用于图形绘制的两个类,它们之间有以下区别:

  1. 继承关系: java.awt.Graphics2D 是 java.awt.Graphics 的子类。因此,Graphics2D 继承了 Graphics 类的所有方法,并且还添加了一些额外的方法和功能。

  2. 功能和方法:

    • java.awt.Graphics 提供了一些基本的绘图方法,如绘制线条、矩形、椭圆等。它的方法相对较少,功能相对有限。
    • java.awt.Graphics2D 是 Graphics 类的扩展,提供了更多的绘图功能和方法。它支持更复杂的图形操作,如图形变换(平移、旋转、缩放和剪切)、设置绘图属性(颜色、字体、渐变等)以及绘制复杂的图形效果(如渐变填充、阴影效果等)。此外,Graphics2D 还支持文本绘制功能。
  3. 对象获取:

    • 对于 Graphics 类,可以通过组件的 paint 方法中的参数获取 Graphics 对象,如 paint(Graphics g)。
    • 要获取 Graphics2D 对象,通常可以通过强制类型转换将 Graphics 对象转换为 Graphics2D 对象,如 Graphics2D g2d = (Graphics2D) g。
  4. 用途:

    • Graphics 类主要用于简单的图形绘制,适用于一些简单的绘图需求。
    • Graphics2D 类提供了更强大和灵活的绘图功能,适用于需要进行复杂图形操作和绘制高级图形效果的场景。

综上所述,java.awt.Graphics2D 是对 java.awt.Graphics 的扩展,提供了更多的绘图功能和方法,使开发人员能够创建更复杂、更丰富的图形效果。在需要进行复杂图形操作和绘制高级图形效果的情况下,推荐使用 Graphics2D 类。

4、和Graphics2D配套使用的类

Graphics2D 类是 Java 2D API 中的核心类,它提供了丰富的图形绘制和操作功能。下面是一些与 Graphics2D 配套使用的主要类:

  1. java.awt.Color:用于表示颜色,可以通过 Graphics2D 的 setColor 方法设置绘图颜色。
  2. java.awt.Font:用于表示字体,可以通过 Graphics2D 的 setFont 方法设置绘图字体。
  3. java.awt.Stroke:用于表示线条样式,可以通过 Graphics2D 的 setStroke 方法设置绘图线条样式。
  4. java.awt.GradientPaint:用于表示渐变颜色,可以创建渐变效果的绘图颜色。
  5. java.awt.TexturePaint:用于表示纹理颜色,可以使用纹理图像作为绘图颜色。
  6. java.awt.Shape:用于表示图形形状,如线条、矩形、椭圆等。Graphics2D 的绘图方法通常会接受 Shape 对象作为参数进行绘制。
  7. java.awt.image.BufferedImage:用于表示图像,可以通过 Graphics2D 的 drawImage 方法绘制图像。
  8. java.awt.geom 包:提供了一系列几何形状类,如 Line2D、Rectangle2D、Ellipse2D (都是Shape子类)等,可以与 Graphics2D 配合使用来绘制更复杂的图形。
  9. java.awt.font 包:提供了字体相关的类,如 FontRenderContext、GlyphVector 等,可以用于绘制文本和处理字体渲染。

这些类是 Graphics2D 的配套类,可以与 Graphics2D 一起使用来实现各种各样的图形绘制和效果。通过组合使用这些类,您可以创建出丰富多样的图形界面应用程序。

java.awt.Shape 主要有以下子类:

子类中文说明
java.awt.Rectangle矩形
java.awt.Polygon多边形
java.awt.Ellipse椭圆
java.awt.Arc
java.awt.Line2D直线
java.awt.CubicCurve2D三次贝塞尔曲线
java.awt.QuadCurve2D二次贝塞尔曲线
java.awt.Arc2D弧形
java.awt.Area区域
java.awt.Path2D路径
java.awt.geom.RoundRectangle2D圆角矩形
java.awt.geom.GeneralPath通用路径
java.awt.geom.PathIterator路径迭代器
java.awt.geom.FlatteningPathIterator平坦化路径迭代器
java.awt.font.TextLayout文本布局
java.awt.font.GlyphVector字形向量
java.awt.font.ShapeGraphicAttribute形状图形属性

5、java.awt.Graphics2D的核心方法

下表列出了 java.awt.Graphics2D 类的一些主要方法及其功能:

方法名称功能描述
void draw(Shape s)绘制指定形状的轮廓
void fill(Shape s)填充指定形状的区域
void drawString(String str, int x, int y)在给定坐标位置绘制指定字符串
void setPaint(Paint paint)设置绘图用的颜色或渐变
void setStroke(Stroke s)设置绘图用的线条样式
void setFont(Font font)设置绘图用的字体
void setRenderingHint(RenderingHints.Key hintKey, Object hintValue)设置绘图渲染提示,如抗锯齿、图像质量等
void translate(int x, int y)将坐标系统平移指定的距离
void rotate(double theta)将坐标系统旋转指定的角度
void scale(double sx, double sy)将坐标系统按指定的比例缩放
void clip(Shape s)设置绘图剪切区域,只有在剪切区域内的图形才会被绘制
void drawImage(Image img, int x, int y, ImageObserver observer)绘制指定图像到指定坐标位置

二、代码示例

以下通过示例代码,演示几个主要的方法使用。

注意:原点坐标是左上角,x轴向右增加,y轴向下增加

ImageUtil工具类

public class ImageUtil {
    public static BufferedImage createImage() {
        int imageWidth = 500;
        int imageHeight = 500;
        return new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);
    }
    /**
     * 将图片保存到指定位置
     */
    public static void saveImage2File(BufferedImage image, String fileLocation, String fileName) {
        try {
            File file = new File(fileLocation);
            if (!file.exists()) {
                file.mkdir();
            }
            FileOutputStream fos = new FileOutputStream(fileLocation + fileName);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ImageIO.write(image, "png", fos);
            bos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1、常用示例

    public static void test() {
        BufferedImage bufferedImage = ImageUtil.createImage();
        Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
        //抗锯齿
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        //高质量
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        //设置浅灰色,并绘制背景
        g.setColor(new Color(0XEEEEEE));
        g.fillRect(0,0,500,500);
        //设置笔画
        BasicStroke stroke = new BasicStroke(10);
        g.setStroke(stroke);
        g.setColor(Color.pink);
        //画线
        Line2D line = new Line2D.Float(0, 0, 200, 300);
        g.draw(line);
        //设置渐变填充
        GradientPaint gt = new GradientPaint(0, 0, Color.green, 50, 30, Color.blue, true);
        g.setPaint(gt);
        //画矩形
        Rectangle2D rect = new Rectangle2D.Float(80, 80, 100, 100);
        g.draw(rect);
        g.setColor(Color.pink);
        // 填充矩形
        rect = new Rectangle2D.Float(275, 275, 50, 50);
        g.fill(rect);
        //画椭圆
        Ellipse2D ellipse = new Ellipse2D.Float(120, 120, 100, 120);
        g.draw(ellipse);
        // 设置渐变色
        gt = new GradientPaint(0, 0, Color.red, 30, 30, Color.yellow, true);
        g.setPaint(gt);
        // 画圆
        ellipse = new Ellipse2D.Float(240, 240, 120, 120);
        g.draw(ellipse);
        ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "g2d_001.png");
    }

在这里插入图片描述

2、绘制圆弧

    /**
     * 圆弧
     */
    public static void arc2D() {
        BufferedImage bufferedImage = ImageUtil.createImage();
        Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
        //抗锯齿
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        //高质量
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        //设置浅灰色,并绘制背景
        g.setColor(new Color(0XEEEEEE));
        g.fillRect(0,0,500,500);
        //设置笔画
        BasicStroke stroke = new BasicStroke(5);
        g.setStroke(stroke);
        g.setColor(Color.pink);
        // x、y 绘制的左上角坐标,w、h 宽、高,start 开始的角度,extent 绘制的总角度,绘制角度从右到左计算
        // type 可选值:Arc2D.OPEN 开放,Arc2D.CHORD 闭合,Arc2D.PIE 饼图
        Arc2D arc1 = new Arc2D.Double(100, 20, 100, 100, 5, 180, Arc2D.OPEN);
        g.draw(arc1);

        g.setColor(Color.green);
        Arc2D arc2 = new Arc2D.Double(100, 120, 100, 100, 0, 180, Arc2D.CHORD);
        g.draw(arc2);

        g.setColor(Color.blue);
        Arc2D arc3 = new Arc2D.Double(100, 180, 100, 100, 0, 270, Arc2D.PIE);
        g.draw(arc3);

        g.setColor(Color.orange);
        arc3 = new Arc2D.Double(100, 300, 100, 100, 0, 270, Arc2D.CHORD);
        g.draw(arc3);

        ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "arc.png");
    }

在这里插入图片描述

3、绘制曲线

    public static void curver2D() {
        BufferedImage bufferedImage = ImageUtil.createImage();
        Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
        //抗锯齿
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        //高质量
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        //设置浅灰色,并绘制背景
        g.setColor(new Color(0XEEEEEE));
        g.fillRect(0,0,500,500);
        //设置笔画
        BasicStroke stroke = new BasicStroke(5);
        g.setStroke(stroke);
        // 二次曲线
        // x1,y1 起点坐标,ctrlx X轴控制点,ctrly Y轴控制点,x2,y2 终点坐标,
        QuadCurve2D q1 = new QuadCurve2D.Double(20,20,100,100,200,20);
        QuadCurve2D q2 = new QuadCurve2D.Double(20,30,100,100,30,200);

        g.setColor(Color.pink);
        g.draw(q1);
        g.draw(q2);

        // 三次曲线
        CubicCurve2D c1 = new CubicCurve2D.Double(50, 200, 150, 100, 200, 300, 300, 200);
        CubicCurve2D c2 = new CubicCurve2D.Double(300, 220, 200, 300, 400, 400, 300, 450);
        g.setColor(Color.green);
        g.draw(c1);
        g.draw(c2);

        ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "curver2D.png");
    }

在这里插入图片描述

4、绘制通用路径

    /**
     * 通用路径
     */
    public static void generalPath() {
        BufferedImage bufferedImage = ImageUtil.createImage();
        Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
        //抗锯齿
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        //高质量
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        //设置浅灰色,并绘制背景
        g.setColor(new Color(0XEEEEEE));
        g.fillRect(0,0,500,500);
        //设置笔画
        BasicStroke stroke = new BasicStroke(10);
        g.setStroke(stroke);
        g.setColor(Color.pink);

        //画几何图形
        GeneralPath path = new GeneralPath();
        // 移动坐标到 150,0
        path.moveTo(150, 0);
        // 画线到 150,150
        path.lineTo(150,150);
        // 画曲线,三点链接,
        path.curveTo(250, 150, 300, 200, 150, 300);
        // 画曲线,三点链接,
        path.curveTo(50, 350, 150, 400, 250, 450);
        g.draw(path);
        ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "generalPath.png");
    }

在这里插入图片描述

5、绘制文本

    public static void text() {
        BufferedImage bufferedImage = ImageUtil.createImage();
        Graphics2D g = (Graphics2D) bufferedImage.getGraphics();
        //抗锯齿
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        //高质量
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        //设置浅灰色,并绘制背景
        g.setColor(new Color(0XEEEEEE));
        g.fillRect(0, 0, 500, 500);
        //设置笔画
        BasicStroke stroke = new BasicStroke(2);
        g.setStroke(stroke);
        g.setColor(Color.pink);

        FontRenderContext frc = g.getFontRenderContext();
        //设置字体
        Font font1 = new Font("黑体", Font.BOLD, 36);
        String str = "文本绘制标题测试";
        //构造文本布局
        TextLayout layout = new TextLayout(str, font1, frc);
        Point2D loc = new Point2D.Float(20, 50);
        //绘制文本
        layout.draw(g, (float) loc.getX(), (float) loc.getY());
        //设置边框
        Rectangle2D bounds = layout.getBounds();
        bounds.setRect(bounds.getX() + loc.getX(),
                bounds.getY() + loc.getY(),
                bounds.getWidth(),
                bounds.getHeight());
        g.draw(bounds);
        //绘制另一行文字
        Font font2 = new Font("微软雅黑", Font.BOLD, 24);
        String str2 = "文本绘制子标题Java图像";
        TextLayout layout2 = new TextLayout(str2, font2, frc);
        g.setColor(Color.gray);
        layout2.draw(g, 20, 180);

        ImageUtil.saveImage2File(bufferedImage, "d:/temp/image/", "text.png");
    }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/139830.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全国不同级别高炉炼铁主要操作指标与分析

参考网址:https://www.zgltw.cn/liantiexinjishu/2020/0114/23584.html (中国炼铁网) 参考网址:https://www.zgltw.cn/liantiexinjishu/2020/0114/23584.html (中国炼铁网 世界金属导报)

RT-DETR算法优化改进:可变形大核注意力(D-LKA Attention),超越自注意力,实现暴力涨点 | 2023.8月最新发表

💡💡💡本文独家改进: 可变形大核注意力(D-LKA Attention),采用大卷积核来充分理解体积上下文的简化注意力机制,来灵活地扭曲采样网格,使模型能够适当地适应不同的数据模式 1)代替RepC3进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.n…

Transformer详解一:transformer的由来和先导知识

目录 参考资料前言一、预训练二、神经网络语言模型(NNLM):预测下一个词one-hot编码的缺陷词向量(word embedding) 三、Word2Vec模型:得到词向量CBOWSkip-gramWord2Vec和NNLM的区别Word2Vec的缺陷 四、ELMO模…

Python实现WOA智能鲸鱼优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

Juniper SRX PPPoE配置

直接上配置脚本 6号口接运营商进行拨号 ---------- set interfaces ge-0/0/6 unit 0 encapsulation ppp-over-ether set interfaces ge-0/0/6 description "Connect_to_Modem" set interfaces pp0 unit 0 pppoe-options underlying-interface ge-0/0/6.0 set inte…

Linux(命令)——结合实际场景的命令 查找Java安装位置命令

前言 在内卷的时代,作为开发的程序员也需要懂一些Linux相关命令。 本篇博客结合实际应用常见,记录Linux命令相关的使用,持续更新,希望对你有帮助。 目录 前言引出一、查找Java安装位置命令1、使用which命令2、使用find命令3、查…

《OSTEP》信号量(chap31)

〇、前言 本文是对《OSTEP》第三十一章的实践与总结。 一、信号量 以下各个版本都是一个生产者-消费者模型&#xff0c;基于信号量实现&#xff0c;并且逐渐完善。 #include <pthread.h> #include <semaphore.h> #include <stdio.h> #define MAX 10int b…

『亚马逊云科技产品测评』活动征文|搭建带有“弱”图像处理功能的流媒体服务器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具&#xff1a; aws ec2 frp-0.52.3 mediamtx-1.3…

RT-DETR算法优化改进: 一种新颖的可扩张残差(DWR)注意力模块,加强不同尺度特征提取能力

💡💡💡本文全网首发独家改进:一种新颖的可扩张残差(DWR)注意力模块,加强不同尺度特征提取能力,创新十足,独家首发适合科研 1)代替RepC3进行使用; 2)DWR直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/…

双十一钜惠!三门不可多得的HarmonyOS学习教程

今年双十一&#xff0c;各大商城优惠不断。这里介绍三门不可多得的HarmonyOS学习教程&#xff0c;都有非常大的折扣优惠。 《鸿蒙HarmonyOS手机应用开发实战》 《鸿蒙HarmonyOS手机应用开发实战》是由清华大学出版社出版的。 目前当当是“7.56折”&#xff1a;http://produc…

RT-DETR算法优化改进:新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 | NeurIPS2022

💡💡💡本文独家改进: 多尺度卷积注意力(MSCA),有效地提取上下文信息,新颖度高,创新十足。 1)代替RepC3进行使用; 2)MSCAAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.ht…

app软件开发多少钱?功能会影响价格吗?

随着智能手机的普及&#xff0c;app开发市场日益繁荣&#xff0c;很多人都有开发app的梦想&#xff0c;但开发一款app需要多少钱呢?功能是否会影响价格?本文将为你揭开这个谜团。 一、app开发费用的影响因素 app开发费用受到多种因素的影响&#xff0c;例如开发难度、功能复…

【Linux】第十六站:进程地址空间

文章目录 一、程序地址空间1.内存的分布2.static修饰后为什么不会被释放3.一个奇怪的现象 二、进程地址空间1.前面现象的原因2.地址空间究竟是什么&#xff1f;3.为什么要有进程地址空间4.页表5.什么叫进程&#xff1f;6.进程具有独立性。为什么&#xff1f;怎么做到呢&#xf…

通讯协议学习之路(实践部分):SPI开发实践

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 本文…

2023/11/13JAVA学习

字节数组增大的同时,运行速度也会加快,但是大到一定程度就不行了 要想追加数据,要在低级流后面加true,高级流后面加不了 不是乱码,不是让人看的 保持数据一一对应 否则会报错 下载后,拷贝到一个包里,再 comment是你想添加的注释 txt文本也可

《005.SpringBoot之仓库管理系统》【有文档】

《005.SpringBoot之仓库管理系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;IDEA jdk1.8 Maven MySQL8.0 技术栈; 后台&#xff1a;SpringBootMybatisPlus; 前端&#xff1a;thymeleaf; [2]功能模块展示&#xff1a; 1.基础…

相机以及其它传感器传感器

深度相机点云质量对比 比较点云质量时需要注意的点&#xff1a; 1.对特殊材质、颜色的检测效果&#xff1a;透明塑料、金属、毛玻璃、高反光物体&#xff08;镜子、水坑&#xff09;、吸光物体&#xff08;黑色物体&#xff09;。 2.特殊环境&#xff1a;雨、雪、雾、明暗交替位…

RT-DETR算法优化改进:Backbone改进 | HGBlock完美结合PPHGNetV2 RepConv

💡💡💡本文独家改进: PPHGNetV2助力RT-DETRHGBlock与PPHGNetV2 RepConv完美结合 推荐指数:五星 HGBlock_PPHGNetV2 | 亲测在多个数据集能够实现涨点 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.html ✨✨✨魔改创新RT-DETR…

Windows电脑如何一键还原系统?

​如果系统出现故障并且需要将电脑一键还原进行修复&#xff0c;以下是在不同版本的Windows操作系统中一键还原系统的操作步骤。 对于 Windows 10/11&#xff1a; 1.按下键盘上的 "Win I" 组合键&#xff0c;打开设置。 2.在设置中选择 "系统" 选项。…

leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)

118.Pascal’s Triangle(杨辉三角&#xff09; 题目给我们一个整数numRows表示杨辉三角形的行数&#xff0c;返回杨辉三角形的前numRows行&#xff0c;下面给出一个杨辉三角形看看它有哪些规律&#xff1b; 可以看出杨辉三角形的每一行的最左侧和最右侧的值都为1. 其余的第…