【Leetcode】Rotate Image
2016-02-01 11:57
357 查看
You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
——————————————————————
Question is not hard at all. All you need to do is to find the pattern behind the rule, which is a[i,j] -> a[j,n-i-1] where n is the length of the matrix.
Thus, I wrote directly on Leetcode and accepted my solution in quick.
well.. but the question wish us to finish in place. I can't help searching the best answer and I wound up with a great one-line python solution that utterly shock me.
Here we go:
Consider the following two-dimensional list:
Lets break it down step by step:
This list is passed into
unpacking, so the
ends up being the equivalent of this:
Hopefully the comments make it clear what
it will group elements from each input iterable based on index, or in other words it groups the columns.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
——————————————————————
Question is not hard at all. All you need to do is to find the pattern behind the rule, which is a[i,j] -> a[j,n-i-1] where n is the length of the matrix.
Thus, I wrote directly on Leetcode and accepted my solution in quick.
public class RotateImage { public static void main(String args[]){ RotateImage ri = new RotateImage(); int[][] mat = {{1,2,3},{4,5,6},{7,8,9}}; ri.rotate(mat); prinf(mat); } private static void prinf(int[][] input){ int l = input.length; for(int p=0;p<l;p++){ for(int q=0;q<l;q++) System.out.print(input[p][q]); System.out.println();} } public void rotate(int[][] matrix) { int len = matrix.length; int[][] tmp = new int[len][len]; for(int i=0;i<len;i++){ for(int j=0;j<len;j++){ tmp[i][j]=matrix[i][j]; } } for(int i=0;i<len;i++) for(int j=0;j<len;j++){ matrix[j][len-i-1] = tmp[i][j]; } } }
well.. but the question wish us to finish in place. I can't help searching the best answer and I wound up with a great one-line python solution that utterly shock me.
Here we go:
class Solution(object): def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: void Do not return anything, modify matrix in-place instead. """ matrix[::] = zip(*matrix[::-1])
Consider the following two-dimensional list:
original = [[1, 2], [3, 4]]
Lets break it down step by step:
>>> original[::-1] # elements of original are reversed [[3, 4], [1, 2]]
This list is passed into
zip()using argument
unpacking, so the
zipcall
ends up being the equivalent of this:
zip([3, 4], [1, 2]) # ^ ^----column 2 # |-------column 1 # returns [(3, 1), (4, 2)], which is a original rotated clockwise
Hopefully the comments make it clear what
zipdoes,
it will group elements from each input iterable based on index, or in other words it groups the columns.
相关文章推荐
- Leetcode题解(22)
- 安卓开发——隐藏状态栏和操作栏
- userAgent
- RelativeLayout执行measure(w,h)方法时,出现NullPointerException的异常情况
- 详解CSS的结构与层叠以及格式化
- junit源码解析--核心类
- junit源码解析--核心类
- debian支持ll命令
- python:open文件操作
- jquery UI datepicker汉化
- 安卓开发——操作栏(Action Bar)的学习
- easyui行按钮
- AFNetWorking3.0使用
- OpenGL-tutorials之射线求交选择(Picking with custom Ray-OBB function)
- 开源与创业
- Mybatis的<where><foreach><set><trim>详解
- linux利用grep查看打印匹配的下几行或前后几行的命令
- <19> go random string
- IOS中使用UIWebView 加载网页、文件、 html的方法
- Nameservice <drmcluster>: NN ID nn1 => vhost45/172.30.134.81:8020 ERROR namenode.FSNamesystem: FS