leetcode第48题

简介: 将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。解法一可以先转置,然后把每列对称交换交换一下

image.png

将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。

解法一

可以先转置,然后把每列对称交换交换一下

image.png

publicvoidrotate(int[][] matrix) {
//以对角线为轴交换for (inti=0; i<matrix.length; i++) {
for (intj=0; j<=i; j++) {
if (i==j) {
continue;
            }
inttemp=matrix[i][j];
matrix[i][j] =matrix[j][i];
matrix[j][i] =temp;
        }
    } 
//交换列for (inti=0, j=matrix.length-1; i<matrix.length/2; i++, j--) {
for (intk=0; k<matrix.length; k++) {
inttemp=matrix[k][i];
matrix[k][i] =matrix[k][j];
matrix[k][j] =temp;
        }
    }
}

时间复杂度:O(n²)。

空间复杂度:O(1)。

也可以先以横向的中轴线为轴,对称的行进行交换,然后再以对角线交换。

解法二

我把这个链接的思路贴过来,里边评论有张图也都顺道贴过来吧,写的很好。

image.png

一圈一圈的循环交换,很妙!

publicvoidrotate(int[][] matrix) {
intn=matrix.length;
for (inti=0; i<n/2; i++) 
for (intj=i; j<n-i-1; j++) {
inttmp=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]=tmp;
        }
}

时间复杂度:O(n²)。

空间复杂度:O(1)。

这道题就是对题目的特征进行观察就可以了。


相关文章
|
8月前
LeetCode
LeetCode
44 0
|
8月前
leetcode-827:最大人工岛
leetcode-827:最大人工岛
70 0
|
8月前
|
Java
leetcode-474:一和零
leetcode-474:一和零
43 0
顺手牵羊(LeetCode844.)
好多同学说这是双指针法,但是我认为叫它顺手牵羊法更合适
87 0
leetcode 283 移动零
leetcode 283 移动零
61 0
|
算法 Java
一和零(LeetCode 474)
一和零(LeetCode 474)
103 0
|
机器学习/深度学习
leetcode第50题
求幂次方,用最简单的想法,就是写一个 for 循环累乘。 至于求负幂次方,比如 2^{-10}2−10,可以先求出 2^{10}210,然后取倒数,1/2^{10}1/210 ,就可以了 double mul = 1; if (n > 0) { for (int i = 0; i < n; i++) { mul *= x; } } else { n = -n; for (int i = 0; i < n; i++) { mul *= x; } mul = 1 / mul; }
104 0
leetcode第50题
|
存储
leetcode第56题
常规的思想,将大问题化解成小问题去解决。 假设给了一个大小为 n 的列表,然后我们假设 n - 1 个元素的列表已经完成了全部合并,我们现在要解决的就是剩下的 1 个,怎么加到已经合并完的 n -1 个元素中。 这样的话分下边几种情况, 我们把每个范围叫做一个节点,节点包括左端点和右端点。 1. 如下图,新加入的节点左端点和右端点,分别在两个节点之间。这样,我们只要删除
111 0
leetcode第56题
leetcode第44题
时间复杂度:text 长度是 T,pattern 长度是 P,那么就是 O(TP)。 空间复杂度:O(TP)。 同样的,和第10题一样,可以优化空间复杂度。
102 0
leetcode第44题
leetcode第37题
从上到下,从左到右遍历每个空位置。在第一个位置,随便填一个可以填的数字,再在第二个位置填一个可以填的数字,一直执行下去直到最后一个位置。期间如果出现没有数字可以填的话,就回退到上一个位置,换一下数字,再向后进行下去。
leetcode第37题