Rotate Image
程序员文章站
2022-06-26 13:31:10
力扣第十二题...
建议记住口诀:
顺时针
先转置(斜右下对角线)再翻转(左右翻转)
逆时针
先转置(斜左下对角线)再翻转(左右翻转)
时间复杂度: O ( N ) O(N) O(N) 空间复杂度: O ( N ) O(N) O(N)
JAVA
① 转置加翻转(顺时针)
class Solution {
public void rotate(int[][] matrix) {
int len = matrix.length; // 获取的是第一维数组的长度
// 转置(斜右下对角线)
for (int i = 0; i < len; ++i)
for (int j = i; j < len; ++j) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
// 翻转(左右翻转)
for (int i = 0; i < len; ++i)
for (int j = 0; j < len / 2; ++j) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[i][len - j - 1];
matrix[i][len - j - 1] = tmp;
}
}
}
先转置(斜右下对角线)再翻转(左右翻转)
② 转置加翻转(逆时针)
class Solution {
public void rotate(int[][] matrix) {
int len = matrix.length; // 获取的是第一维数组的长度
// 转置(斜右下对角线)
for (int i = 0; i < len; ++i)
for (int j = len-i-1; j >= 0; --j) { // 改变
int tmp = matrix[i][j];
matrix[i][j] = matrix[len-j-1][len-i-1]; // 改变
matrix[len-j-1][len-i-1] = tmp; // 改变
}
// 翻转(左右翻转)
for (int i = 0; i < len; ++i)
for (int j = 0; j < len / 2; ++j) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[i][len - j - 1];
matrix[i][len - j - 1] = tmp;
}
}
}
先转置(斜左下对角线)再翻转(左右翻转)【或者顺时针三次】
相对于顺时针,转置函数改变的地方用注释写出来了
Python
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
matrix.reverse() # 翻转(上下翻转)
for i in range(len(matrix)): # 转置(斜右下对角线)
for j in range(i+1,len(matrix)):
tmp=matrix[i][j]
matrix[i][j]=matrix[j][i]
matrix[j][i]=tmp
先翻转(上下翻转)再转置(斜右下对角线)
本文地址:https://blog.csdn.net/weixin_52542509/article/details/110248032
推荐阅读
-
vue的style绑定background-image的方式和其他变量数据的区别详解
-
WPF 给Button按钮加小图标图片Image
-
Neat Image磨皮功能如何使用?Neat Image详细教程(针对初学者)
-
Python3实现转换Image图片格式
-
CSS3 border-image详解、应用及jQuery插件
-
纯css实现元素下出现横线动画(background-image)
-
php使用Image Magick将PDF文件转换为JPG文件的方法
-
Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
-
使用Python PIL库中的Image.thumbnail函数裁剪图片
-
图片浏览器FastStone Image Viewer中文安装及激活教程(附注册码)