直接拉黑,问题解决得干净利落。你都滚蛋了,凭啥还得背锅? 拉个“一次性项目群”,收费答疑,先转账再解决。这才叫业务逻辑闭环! 给出一句“我已经不在公司了,相关问题请联系现任负责人”简单、优雅、无情。
算法题:旋转图像
matrix
,你需要直接在矩阵上操作,让它顺时针旋转90度。注意,不能新开数组。这要求有点像领导下班前甩来的需求:时间紧、任务重、资源少,但咱得干得漂亮。
我的思路
矩阵转置:把第 (i) 行变成第 (i) 列。 每行反转:这就像把转置后的矩阵按列方向倒过来。
Java实现
public class RotateImage {
public void rotate(int[][] matrix) {
int n = matrix.length;
// Step 1: Transpose the matrix
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
// Swap matrix[i][j] and matrix[j][i]
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// Step 2: Reverse each row
for (int i = 0; i < n; i++) {
reverseRow(matrix[i]);
}
}
private void reverseRow(int[] row) {
int left = 0, right = row.length - 1;
while (left < right) {
// Swap row[left] and row[right]
int temp = row[left];
row[left] = row[right];
row[right] = temp;
left++;
right--;
}
}
}
代码讲解
矩阵转置:简单来说,就是对角线翻转。我们遍历矩阵的上三角部分(包含对角线),把 matrix[i][j]
和matrix[j][i]
的值互换。
举个例子,原矩阵:1 2 3
4 5 6
7 8 9转置后: 1 4 7
2 5 8
3 6 9每行反转:将转置后的矩阵每行从两端向中间交换。比如上面转置后的矩阵,第一行 [1, 4, 7]
反转成[7, 4, 1]
,依次类推。最终的矩阵变成:7 4 1
8 5 2
9 6 3是不是又干净又利索?这样看,算法也没啥花里胡哨的,反倒很朴实。
小段子时间
关于复杂度
坑点提醒
边界控制:在矩阵转置的时候,记得内层循环从 j = i
开始,这样才能避免重复翻转。特殊情况:题目一般默认矩阵是正方形,如果面试官给个矩形矩阵,记得问清楚是不是旋转90度后不再是原形状。
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。