Leetcode 48. 旋转图像(中等) 54. 螺旋矩阵(中等) 59. 螺旋矩阵 II(中等) 旋转遍历二维数组
labuladong
48. 旋转图像(中等)
题目:
原地将二维矩阵顺时针旋转90度
思路:
先按左上至右下对角线对折,再将每一行调转
class Solution { public: void rotate(vectorint>>& matrix) { int n=matrix.size(); //按左上-右下对角线翻转 for(int i=0;i i){ for(int j=i;j j){ swap(matrix[i][j],matrix[j][i]); } } //对每一行反转 for(int i=0;i i){ int l=0; int r=n-1; while(l<r){ swap(matrix[i][l],matrix[i][r]); l++; r--; } } } };
同理,逆时针旋转90度的话
// 将二维矩阵原地逆时针旋转 90 度 void rotate2(int[][] matrix) { int n = matrix.length; // 沿左下到右上的对角线镜像对称二维矩阵 for (int i = 0; i < n; i++) { for (int j = 0; j < n - i; j++) { // swap(matrix[i][j], matrix[n-j-1][n-i-1]) int temp = matrix[i][j]; matrix[i][j] = matrix[n - j - 1][n - i - 1]; matrix[n - j - 1][n - i - 1] = temp; } } // 然后反转二维矩阵的每一行 for (int[] row : matrix) { reverse(row); } } void reverse(int[] arr) { /* 见上文 */}
54. 螺旋矩阵(中等)
题目:
按照顺时针的顺序读取二维数组
思路:
随着螺旋遍历,相应的边界会收缩,直到螺旋遍历完整个数组。注意while循环结束条件为ret.size 题目: 按照螺旋的顺序生成矩阵 思路: 同理遍历,注意结束条件为num<=n*nclass Solution {
public:
vector<int> spiralOrder(vector
59. 螺旋矩阵 II(中等)
class Solution {
public:
vector