update: 06/25/2016
现在在过遍数,感觉之前的那种找offset规律太难找,太难记,尤其是在面试的时候,根本不可能。于是通过带入offset,找到了如下的规律:
[start, i] [i, end]
[start + end - i, start] [end, start + end - i]
看到没,上面就是四个角的坐标规律,其实是对称的。
public class Solution {
public void rotate(int[][] matrix) {
int start = 0, end = matrix.length - 1;
while (start < end) {
for (int i = start; i < end; i++) {
int temp = matrix[start][i];
matrix[start][i] = matrix[start + end - i][start];
matrix[start + end - i][start] = matrix[end][start + end - i];
matrix[end][start + end - i] = matrix[i][end];
matrix[i][end] = temp;
}
start++;
end--;
}
}
}
置换规律:参考点击打开链接
int offset = i - start;
public class Solution {
public void rotate(int[][] matrix) {
int start = 0, end = matrix.length - 1;
while (start < end) {
for (int i = start; i < end; i++) {
int offset = i - start;
int temp = matrix[start][i];
matrix[start][i] = matrix[end - offset][start];
matrix[end - offset][start] = matrix[end][end - offset];
matrix[end][end - offset] = matrix[start + offset][end];
matrix[start + offset][end] = temp;
}
start++;
end--;
}
}
}