详细见:leetcode.com/problems/rotate-image
Java Solution: github
package leetcode;
public class P048_RotateImage {
/*
* 0 ms
* 26.00%
*/
static class Solution1 {
public void rotate(int[][] matrix) {
if (matrix == null || matrix.length < 2)
return;
int i = 0, j = matrix.length - 1;
while (i < j) {
for (int k = 0; k < j - i; k ++) {
int temp = matrix[i][i + k];
matrix[i][i + k] = matrix[j - k][i];
matrix[j - k][i] = matrix[j][j - k];
matrix[j][j - k] = matrix[i + k][j];
matrix[i + k][j] = temp;
}
i ++;
j --;
}
}
}
}
C Solution: github
/*
url: leetcode.com/problems/rotate-image/
AC 6ms 1.02%
*/
#include <stdio.h>
#include <stdlib.h>
//[i, i] [j, j]
void shell_rotate(int** m, int i, int j) {
int t = 0, k = 0;
for (k = 0; k < j-i; k ++) {
t = m[i][i+k];
m[i][i+k] = m[j-k][i];
m[j-k][i] = m[j][j-k];
m[j][j-k] = m[i+k][j];
m[i+k][j] = t;
}
}
void rotate(int** m, int mr, int mc) {
int i = 0, j = mr - 1;
while (i < j) {
shell_rotate(m, i, j);
i ++;
j --;
}
}
int main() {
int n = 4;
int** m = (int**) malloc(sizeof(int*) * n);
int m0[] = {1, 2, 3, 4};
int m1[] = {5, 6, 7, 8};
int m2[] = {9, 10, 11, 12};
int m3[] = {13, 14, 15, 16};
int mr = 4, mc = 4, i = 0, j = 0;
m[0] = m0;
m[1] = m1;
m[2] = m2;
m[3] = m3;
rotate(m, mr, mc);
//shell_rotate(m, 0, 3);
for (i = 0; i < 4; i ++) {
for (j = 0; j < 4; j ++) {
printf("%d ", m[i][j]);
}
printf("\r\n");
}
free(m);
}
Python Solution: github
#coding=utf-8
'''
url: leetcode.com/problems/rotate-image
@author: zxwtry
@email: zxwtry@qq.com
@date: 2017年4月8日
@details: Solution: 75ms 8.23%
'''
class Solution(object):
def shell_rotate(self, m, i, j):
for k in range(i, j):
t = m[i][k]
m[i][k] = m[i+j-k][i]
m[i+j-k][i] = m[j][i+j-k]
m[j][i+j-k] = m[k][j]
m[k][j] = t
def rotate(self, m):
"""
:type m: List[List[int]]
:rtype: void Do not return anything, modify m in-place instead.
"""
n = 0 if m == None else len(m)
if n == 0: return
i, j = 0, n-1
while i < j:
self.shell_rotate(m, i, j)
i, j = i+1, j-1
if __name__ == "__main__":
m = [[1,2,3,4] for i in range(4)]
Solution().rotate(m)
# Solution().rotate(m)
print(m)