Amazon OA2准备——矩阵旋转

本文介绍了一种实现矩阵顺时针或逆时针旋转的算法。通过创建新的矩阵并将原矩阵元素按旋转规则放置到新矩阵中,实现了不同方向的旋转。适用于非正方形矩阵。

题目是给一个矩阵,再给一个flag,顺时针或者逆时针旋转矩阵。

在leetcode中有一道类似的题目,rotate image。不过leetcode的题目中的矩阵是正方形,也给定了是顺时针旋转的。

理清楚思维其实这道题就想出来了。


 012
0123
1567

例如这么一个矩阵,变为

 01
037
126
215

或者

 01
051
162
273

这么的一个过程。

用长宽创建一个新的矩阵,对应数字放进去就可以了。我的程序中假定用户非常的友好,给的flag除了0,1不会输入其他的。这个也不是问题就是了。

	private static int[][] rotate(int[][] matrix, int flag) {
		// TODO Auto-generated method stub
		if(matrix==null)
			return matrix;
		if(matrix.length < 2 && matrix[0].length < 2 )
			return matrix;
		
		int width = matrix[0].length;
		int height = matrix.length;		
		int[][] newM = new int[width][height];
		if(flag == 1)
		{
			
			newM = clockwise(matrix);
		}else
		{
			newM = counterclockwise(matrix);
		}
		
		
		return newM;
	}

	private static int[][] counterclockwise(int[][] matrix) {
		int width = matrix[0].length;
		int height = matrix.length;	
		int[][] newM = new int[width][height];

		int h = 0;
		int w = width-1;
		for(int i=0; i < height; i++)
		{
			for(int j=0; j < width; j++)
			{				
				newM[j][i] = matrix[h][w];
				w --;
			}
			
			if(w < 0)
					w = width-1;
			h ++;
			if(h > height)
					h = 0;
		}
		return newM;
	}

	private static int[][] clockwise(int[][] matrix) {
		// TODO Auto-generated method stub
		int width = matrix[0].length;
		int height = matrix.length;	
		int[][] newM = new int[width][height];

		int h = height;
		int w = 0;
		for(int i=0; i < height; i++)
		{
			for(int j=0; j < width; j++)
			{				
				newM[j][i] = matrix[h-1][w];
				w += 1;
			}
			
			if(w >= width)
					w = 0;
			h --;
			if(h < 0)
					h = height-1;
		}
		return newM;
	}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值