力扣刷题-热题100题-第20题(c++、python)

48. 旋转图像 - 力扣(LeetCode)https://leetcode.cn/problems/rotate-image/?envType=study-plan-v2&envId=top-100-liked

使用辅助矩阵

直接创建一个新矩阵来装旋转好的矩阵,不过需要注意的是要将新矩阵的值赋值回原矩阵,在c++中是可以直接=,但python中要注意matrix[:]=matrix1才是赋值,直接=是改变原数组的地址不符题意

//c++
class Solution {
public:
    void rotate(vector>& matrix) 
    {
        int n=matrix.size();
        auto matrix1=matrix;
        for(int i=0;i None:
        n=len(matrix)
        matrix1=[[0]*n for i in range(n)]
        for i in range(n):
            for j in range(n):
                matrix1[j][n-i-1]=matrix[i][j]
        matrix[:]=matrix1

原地翻转

分析翻转如下图所示,对于每一个元素黄色圈圈,它的翻转要经过4次,同时只有橙色区域的元素需要遍历来进行翻转操作,因而能写出循环的边界以及每个元素要做的四个翻转操作。

力扣刷题-热题100题-第20题(c++、python)_第1张图片

//c++
class Solution {
public:
    void rotate(vector>& matrix) 
    {
        int n=matrix.size();
        for(int i=0;i None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n=len(matrix)
        m=n
        for i in range(n//2):
            for j in range(m-1):
                a=i+j
                b=matrix[i][a]
                matrix[i][a] = matrix[n-1-a][i]
                matrix[n-1-a][i] = matrix[n-1-i][n-1-a]
                matrix[n-1-i][n-1-a] = matrix[a][n-1-i]
                matrix[a][n-1-i]=b
            m=m-2

拆解翻转

直接翻转操作可能复杂,但是把翻转操作拆解可以得到简单的两步,如第一行会变为最后一列,那么第一步可以是上下翻转,第一行变为最后一行;第二步是对角线翻转,最后一行变为最后一列。这两个操作更加简单。

//c++
class Solution {
public:
    void rotate(vector>& matrix) 
    {
        int n=matrix.size();
        for(int i=0;i None:
        n=len(matrix)
        for i in range(n//2):
            for j in range(n):
                matrix[i][j],matrix[n-i-1][j]=matrix[n-i-1][j],matrix[i][j]
        for i in range(n):
            for j in range(i):
                matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]

你可能感兴趣的:(c++,python,leetcode)