力扣题.48旋转图像

给定一个 × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:

给定一个 × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 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]]
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

 这道题不是很困难,我觉得解决这道题在纸上多画一画,就能解决,这道题更多的其实是找规律 ,找到了规律,问题以及迎刃而解。

大概思路如下:大家理解思路可以先自己尝试写一写

//旋转图像

//  1   2   3           7   8   9

//  4   5   6   --》  8   5   2

//  7   8   9           9   6   3

//1.上下交换

//-->    1   2   3              7   8   9

//         4   5   6    ==》  4   5   6

//-->     7   8   9             1   2   3

//2.斜面交换

//        7   8   9             3   6   9

//        4   5   6    ==》 2   5   8

//        1   2   3             1   4   7

 我注释写的也很清楚,废话不多说,直接上代码!

#include <stdio.h>

//旋转图像
//  1   2   3           7   8   9
//  4   5   6   --》    8   5   2
//  7   8   9           9   6   3

//1.上下交换 
//-->     1   2   3             7   8   9
//        4   5   6    ==》     4   5   6
//-->     7   8   9             1   2   3

//2.斜面交换
//        7   8   9             3   6   9
//        4   5   6    ==》     2   5   8
//        1   2   3             1   4   7


int** revolve(int** nums,int i, int j) 
{
    int num = i*j/2, count = 0;  //
    int (*p)[i][j] = nums;       //指针指向这个数组,用指针来操作


    for(int a=0; a<i; a++)
    {
        for(int b=0; b<(j/2); b++)          //-->     1   2   3
                                            //        4   5   6
        {                                   //-->     7   8   9
            int temp;                       //将上下的数交换    规律:nunms[i][j] = nums[i][size-1-j]
            temp = (*p)[a][b];              //-->     7   8   9
                                            //        4   5   6
                                            //-->     1   2   3
            (*p)[a][b] = (*p)[a][j-1-b];
            (*p)[a][j-1-b] = temp;
        }
       

    } 

    int b;
    for(int a=0; a<i-1; a++)
    {
        for(b=0; b<j-1; b++)                //斜面交换 :    规律:nums[i][j] = nums[size-1-j][size-1-i]
                                            //斜面交换 ,只要交换
                                            // 1   2   3
                                            // 4   5
                                            // 7
        {                                   //上斜面
            int temp = (*p)[a][b];
            (*p)[a][b] = (*p)[i-1-b][j-1-a];
            (*p)[i-1-b][j-1-a] = temp;

        }

        b--;
    } 
    return nums;
    
    
}
int main()
{
    int m = 4, n = 4;
    int nums[4][4] = {{5,1,9,11}, {2,4,8,10}, {13,3,6,7}, {15,14,12,16}};
    int (*p1)[4] = revolve(nums,4,4);
    for(int i=0; i<4; i++)
    {
        for(int j=0; j<4; j++)
        {
            printf("%5d",*(p1[i]+j));
        }
       printf("\n");

    }
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值