标签:tmp Rotate matrix int Image len 转置 LeetCode 翻转
建议记住口诀:
顺时针
先转置(斜右下对角线)再翻转(左右翻转)
逆时针
先转置(斜左下对角线)再翻转(左右翻转)
时间复杂度: 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
先翻转(上下翻转)再转置(斜右下对角线)
标签:tmp,Rotate,matrix,int,Image,len,转置,LeetCode,翻转 来源: https://blog.csdn.net/weixin_52542509/article/details/110248032
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。