码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode -- 顺时针旋转图片90度

时间:2015-08-11 18:44:21      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

题目:给定二维数组,将其中每个点顺时针旋转90度。


思路:
得旋转公式:
找规律,取一些点,判断旋转前后的坐标关系,不难得出:
a[i,j]变成了a[n-j,i], a[n-j,i]变成了a[n-i,n-j],a[n-i,n-j]变成了a[j,n-i],a[j,n-i]变成了a[i,j]
定范围:

对于外循环,只需要旋转一半的长度就可以。可以想象把正方形上下平分,拿着另一半旋转3次,每次转90度,最后刚好对齐。 因此i ∈ [0,n/2]


对于内循环,要从将要旋转的元素为起始,旋转n-i-1次,其中n=总长度,i=已经旋转的个数。 因此j 属于[i, n-i)。可以想象一个正方形铁环,一圈一圈的缩小(对于同一个元素不能被重复旋转)


实现代码:







public class Solution {
    
 private static bool IsMatrix(int[,] matrix){
 	if(matrix == null){
		return false;
	}
	
	for(var i = 0;i < matrix.GetLength(0); i++){
		if(matrix.GetLength(1) != matrix.GetLength(0)){
			return false;
		}
	}
	
	return true;
 }
 // clock direction
 public void Rotate(int[,] matrix) 
 {
     if(!IsMatrix(matrix)){
	 	return;
	 }
	 
	 var n = matrix.GetLength(0) - 1;
	 for(var i = 0;i <= n/2 + 1 ;i ++){
	 	for(var j = i;j < n-i; j++){
			var t = matrix[i,j];
			matrix[i,j] = matrix[n-j,i];
			matrix[n-j,i] = matrix[n-i,n-j];
			matrix[n-i,n-j] = matrix[j,n-i];
			matrix[j,n-i] = t;
			
		}
		
	 }
 }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode -- 顺时针旋转图片90度

标签:

原文地址:http://blog.csdn.net/lan_liang/article/details/47424119

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!