48. 旋转图像(中等题)

题目

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:
在这里插入图片描述

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:
在这里插入图片描述

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

示例 3:

输入:matrix = [[1]]
输出:[[1]]

示例 4:

输入:matrix = [[1,2],[3,4]]
输出:[[3,1],[4,2]]

官方题解

https://leetcode-cn.com/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/

方法一:使用辅助数组

对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        int[][] matrix_new = new int[n][n];
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix_new[j][n - i - 1] = matrix[i][j];
            }
        }
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix[i][j] = matrix_new[i][j];
            }
        }
    }
}

在这里插入图片描述

方法二:原地旋转

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        for (int i = 0; i < n / 2; ++i) {
            for (int j = 0; j < (n + 1) / 2; ++j) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - j - 1][i];
                matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];
                matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];
                matrix[j][n - i - 1] = temp;
            }
        }
    }
}

在这里插入图片描述

方法三:用翻转代替旋转

class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        // 水平翻转
        for (int i = 0; i < n / 2; ++i) {
            for (int j = 0; j < n; ++j) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - i - 1][j];
                matrix[n - i - 1][j] = temp;
            }
        }
        // 主对角线翻转
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < i; ++j) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
    }
}

在这里插入图片描述

这题主要是找到规律,好像跟数学没多少关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: libtxtoverlay.so 是一个库文件,主要用于在图形界面上叠加文本。 使用 libtxtoverlay.so 可以在图形界面中直接显示文本,并且可以自定义文本的样式、位置等参数。通过加载这个库文件,我们可以在应用程序中实现文本叠加的功能。 使用 libtxtoverlay.so 首先需要将库文件引入到项目中,然后在代码中调用相应的函数。这些函数可以用来设置文本的内容、样式和位置等属性,还可以进行文本的显示和隐藏操作。我们可以根据需要自定义文本的字体、大小、颜色等属性,实现不同的效果。 另外,使用 libtxtoverlay.so 的过程中需要注意一些细节。比如,在调用相关函数之前需要进行初始化操作,确保库文件正常加载;还需要注意对文本的位置计算,保证文本在界面上正确显示。 总之,libtxtoverlay.so 提供了丰富的函数和接口,可以实现在图形界面上叠加文本的效果。通过合理使用这些函数,我们可以轻松地在应用程序中实现各种文本叠加需求,提升用户体验。 ### 回答2: libtxtoverlay.so 是一个库文件,用于在视频或图像上叠加文本。使用该库,可以将文本添加到视频、照片或其他图像上,并进行一些自定义设置,例如选择字体、大小、位置、颜色和背景等。 要使用libtxtoverlay.so,首先需要将库文件引入到项目中。可以通过在代码中包含库文件的路径来实现。接下来,需要编写代码来实现文本叠加的具体功能。 在代码中,需要调用库文件提供的函数来实现文本叠加。这些函数通常包括设置文本属性、加载图像或视频文件、添加文本、保存输出等。 例如,可以使用库中的函数来加载一个图像文件,然后选择要添加的文本、文本的位置和颜色等属性。然后,调用叠加函数,将文本添加到图像上,并输出保存结果。 使用libtxtoverlay.so,可以实现各种应用场景,如在视频中添加字幕、在照片上添加水印、在广告中添加文本等。可以根据具体的需求来调整文本的样式和位置,以达到想要的效果。 总的来说,libtxtoverlay.so 是一个实现文本叠加功能的库文件,通过调用其中的函数来实现在图像或视频上添加文本的功能。使用该库可以实现各种个性化需求,为图像或视频添加更多信息或美化效果。 ### 回答3: libtxtoverlay.so 是一个用于文本叠加的共享库。它可以通过在应用程序中加载这个库来实现图像或视频上的文字叠加功能。 使用 libtxtoverlay.so,我们可以将指定的文字内容添加到图像或视频上的指定位置。首先,我们需要确保在应用程序中正确加载 libtxtoverlay.so。加载库时,我们可以通过指定正确的路径来确保正确找到库文件。 一旦库加载成功,我们就可以使用其中的函数来实现文字叠加功能。可以通过传入要叠加的图像或视频的路径以及要叠加的文字内容作为参数来调用函数。这个函数会在原始图像上添加文字,并生成一个新的图像或视频文件来存储结果。 在叠加文字时,我们可以指定文字的位置,比如左上角、右下角、居中等。我们还可以设置文字的大小、颜色、字体等属性。库中的函数还可以实现文字的旋转、透明度调整等效果,以满足不同的需求。 一旦完成文字叠加,我们可以保存输出的图像或视频文件,并在应用程序中进行进一步处理或展示。 总而言之,libtxtoverlay.so 是一个用于文本叠加的库,可以通过加载它来实现在图像或视频上添加文字的功能。通过调用其中的函数,并传入正确的参数,我们可以在指定位置上添加指定内容的文字,并生成一个新的图像或视频文件。使用这个库可以方便地实现各种文本叠加效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值