博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
旋转正方形矩阵
阅读量:6498 次
发布时间:2019-06-24

本文共 1525 字,大约阅读时间需要 5 分钟。

Problem:

  旋转正方形矩阵【题目】 给定一个整型正方形矩阵matrix,
  请把该矩阵调整成顺时针旋转90度的样子。
  【要求】 额外空间复杂度为O(1).

Solution:

  同样,采用由外向内一圈一圈变换,找到元素变换位置的规律即可。
  难点在于区分偶数维矩阵和奇数维矩阵的不同操作

 

Code:

  

1 #pragma once 2  3 #include 
4 using namespace std; 5 6 template
7 void RotateMatrix(T& arr,const int x, const int y)//使用数组的引用传参,怎可在原数组上进行旋转 8 { 9 int lx = 0, ly = 0; //左上角坐标10 int rx = x - 1, ry = y - 1;//右下角的坐标11 12 while (lx < rx || ly < ry)13 {14 15 for (int k = 0; k < ry - ly; ++k)//每一个圈次中所要旋转的元素16 {17 int temp = arr[lx][ly + k];18 arr[lx][ly + k] = arr[rx - k][lx];19 arr[rx - k][lx] = arr[rx][ry - k];20 arr[rx][ry - k] = arr[lx + k][ry];21 arr[lx + k][ry] = temp;22 }23 24 lx += 1;//左上角右下移25 ly += 1;26 rx -= 1;//右下角左上移27 ry -= 1;28 }29 30 }31 32 void Test()33 {34 int aa[3][3] = { 1,2,3,4,5,6,7,8,9 };35 int bb[4][4] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };36 37 RotateMatrix(aa, 3, 3);38 for (auto &a : aa)39 {40 for (auto b : a)41 cout << b << " ";42 cout << endl;43 }44 cout << endl << "******************************" << endl;45 46 RotateMatrix(bb, 4, 4);47 for (auto &a : bb)48 {49 for (auto b : a)50 cout << b << " ";51 cout << endl;52 }53 cout << endl << "******************************" << endl;54 55 }

 

转载于:https://www.cnblogs.com/zzw1024/p/10989042.html

你可能感兴趣的文章
软件工程技术基础-(软件复用技术)
查看>>
给django视图类添加装饰器
查看>>
对javscript中Object.defineProperty的理解
查看>>
.vimrc文件
查看>>
DVWA默认用户名密码
查看>>
简述 clearfix 的原理
查看>>
swift轮播图代码
查看>>
Entity Framework 约定
查看>>
构建现代化的命令行工具
查看>>
【Project Euler】530 GCD of Divisors 莫比乌斯反演
查看>>
js 使用 Lawnchair 存储 json 对象到本地
查看>>
还有这种操作?
查看>>
计算机基础第二课时
查看>>
POJO、JavaBean、DAO
查看>>
json的简单的数据格式
查看>>
关键字this引用
查看>>
iOS图像识别
查看>>
SharePoint 2010 自定义日志
查看>>
python 字符编码问题
查看>>
自动配置IPv4问题
查看>>