Rotate Image
程序员文章站
2022-03-14 21:21:52
力扣第十二题...
建议记住口诀:
顺时针
先转置(斜右下对角线)再翻转(左右翻转)
逆时针
先转置(斜左下对角线)再翻转(左右翻转)
时间复杂度: 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
推荐阅读
-
yum出现database disk image is malformed错误的解决方法
-
WPF 在image控件用鼠标拖拽出矩形的实现方法
-
CSS3 3D旋转rotate效果实例介绍
-
How to run and use SWF To Image on x64 Windows
-
Canvas与Image互相转换示例代码
-
yum出现database disk image is malformed错误的解决方法
-
coreldraw中如何精准控制对象 Position和Rotate按钮轻松搞定
-
Unity3D UGUI特效之Image高斯模糊效果
-
java如何将pdf转换成image
-
vue的style绑定background-image的方式和其他变量数据的区别详解