LeetCode048 Rotate Image

详细见: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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值