面试题 01.07. 旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?
题解:
1.N × N 矩阵
2.对矩阵中每个元素旋转90度
3.不占用额外内存空间怎么做?
示例 1:
给定 matrix =
[ [1,2,3],
[4,5,6],
[7,8,9]],
原地旋转输入矩阵,使其变为:
[ [7,4,1],
[8,5,2],
[9,6,3]]
示例 2:
给定 matrix =
[ [ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]],
原地旋转输入矩阵,使其变为:
[ [15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]]
解题思路:
思路一:先对角置换,再中心行对换
C/C++题解:(点击蓝字阅读源码,或前往公众号回复“01.07”获取)
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
Java题解:(点击蓝字阅读源码,或前往公众号回复“01.07”获取)
class Solution {
public void rotate(int[][] matrix) {
Python题解:(点击蓝字阅读源码,或前往公众号回复“01.07”获取)
class Solution(object):
def rotate(self, matrix):
""":type matrix: List[List[int]]"""
例题来自力扣网https://leetcode-cn.com/
思路二:转圈圈(点击蓝字阅读源码,或前往公众号回复“01.07”获取)
class Solution(object):
def rotate(self, matrix):
""":type matrix: List[List[int]]"""
#遍历到一个元素时,则把旋转90度所在位置上4个同位元素
#同时旋转到对应位置上,这样只需遍历中心行以上元素
思路三:额外开辟一个数组写入旋转后的元素(点击蓝字阅读源码,或前往公众号回复“01.07”获取)
class Solution(object):
def rotate(self, matrix):
""":type matrix: List[List[int]]"""
#设置一个额外的辅助序列也是可行的
#先遍历元素写到旋转后的位置上
#在对原序列重新赋值一遍
更多题解可前往公众号免费获取