旋转二维数组

求和为给定值的组合

问题

这个题目说的是,给你一个 n x n 的二维数组,你要沿顺时针方向将它旋转 90 度。要求你不能使用额外的存储空间,就地在原数组操作。

比如说,给你的二维数组是:

1, 2, 3
4, 5, 6
7, 8, 9

顺时针旋转 90 度后,得到的二维数组是:

7, 4, 1
8, 5, 2
9, 6, 3

代码

public class AlgoCasts {

  // Time: O(n^2), Space: O(1)
  public void rotate(int[][] matrix) {
    if (matrix == null || matrix.length == 0 ||
      matrix[0] == null || matrix[0].length == 0)
      return;
    int n = matrix.length;
    for (int i = 0; i < n; ++i) {
      for (int j = i; j < n; ++j) {
        int tmp = matrix[i][j];
        matrix[i][j] = matrix[j][i];
        matrix[j][i] = tmp;
      }
    }
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < n/2; ++j) {
        int tmp = matrix[i][j];
        matrix[i][j] = matrix[i][n-1-j];
        matrix[i][n-1-j] = tmp;
      }
    }
  }

}

  转载请注明: ForwardXu 旋转二维数组

 上一篇
旋转数组 旋转数组
旋转数组问题 这个题目说的是,给你一个数组和一个数字 k,你要把数组右边的数字旋转到数组左边,一次旋转一个数字,共旋转 k 次。 比如说,给你的数组是: 0, 1, 2, 4, 8 给你的数字 k 是 3: k = 3 把数组右边的
2019-01-06
下一篇 
旋转有序数组的搜索 旋转有序数组的搜索
旋转有序数组的搜索问题 这个题目说的是,给你一个旋转有序的整数数组,和一个目标值,你要在数组里找到目标值,然后返回它的下标。如果找不到则返回 -1。注意:数组中不存在重复数字。旋转有序数组是由一个原来有序的数组通过左旋或右旋部分数字到另一端
2019-01-06
  目录