题目描述(中等难度)

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

解法一

可以先转置,然后把每列对称交换交换一下。 48. Rotate Image - 图2 1. public void rotate(int[][] matrix) { 2. //以对角线为轴交换 3. for (int i = 0; i < matrix.length; i++) { 4. for (int j = 0; j <=i; j++) { 5. if (i == j) { 6. continue; 7. } 8. int temp = matrix[i][j]; 9. matrix[i][j] = matrix[j][i]; 10. matrix[j][i] = temp; 11. } 12. } 13. //交换列 14. for (int i = 0, j = matrix.length - 1; i < matrix.length / 2; i++, j--) { 15. for (int k = 0; k < matrix.length; k++) { 16. int temp = matrix[k][i]; 17. matrix[k][i] = matrix[k][j]; 18. matrix[k][j] = temp; 19. } 20. } 21. 22. }

时间复杂度:O(n²)。 空间复杂度:O(1)。 也可以先以横向的中轴线为轴,对称的行进行交换,然后再以对角线交换。

解法二

我把这个链接的思路贴过来,里边评论有张图也都顺道贴过来吧,写的很好。 48. Rotate Image - 图3 一圈一圈的循环交换,很妙! 1. public void rotate(int[][] matrix) { 2. int n=matrix.length; 3. for (int i=0; i<n/2; i++) 4. for (int j=i; j<n-i-1; j++) { 5. int tmp=matrix[i][j]; 6. matrix[i][j]=matrix[n-j-1][i]; 7. matrix[n-j-1][i]=matrix[n-i-1][n-j-1]; 8. matrix[n-i-1][n-j-1]=matrix[j][n-i-1]; 9. matrix[j][n-i-1]=tmp; 10. } 11. }

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

总

这道题就是对题目的特征进行观察就可以了。 windliang wechat 添加好友一起进步~ 如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^ 如果想系统的学习数据结构和算法,强烈推荐一个我之前学过的课程,可以点击 这里 查看详情