引言
作为码农,我们需要对各种类型的代码都有所了解,这样才会在面对客户的各种需求时不至于手忙脚乱,能够从容应对客户的各种需求,从而保住自己的饭碗。本节以巨型旋转作为示例进行讲解。
代码需求
需求描述:
有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵。
测试样例:
输入:
[[1,2,3],[4,5,6],[7,8,9]],3
复制
返回值:
[[7,4,1],[8,5,2],[9,6,3]]
复制
需求解析:从代码的需求我们发现,要将N*N的矩阵顺时针旋转90度,相当于将其重新进行排列,其中的行变为列,列变为行,不过,在列变为行之后,要在原有的顺序上进行翻转,才能够满足旋转90度的要求。
整个过程如下:
将矩阵
[[1,2,3],[4,5,6],[7,8,9]],3进行90度翻转过程如下:
矩阵刚开始为:
先沿着左对角线做翻转为:
输出为:[[1,4,7],[2,5,8],[3,6,9]]
再将元素进行翻转得到[[7,4,1],[8,5,2],[9,6,3]]。
最终将矩阵顺时针旋转90度后结果变为:
我们通过分析可知,就是将第一行与第一列做了交换,将第一列的值赋给第一行,第二列给了第二行,第三列给了第三行,就是将矩阵顺时针旋转90度。
通过上述要求,我们不难得到如下的实现代码:
classSolution{
public:
vectorvectorintrotateMatrix(vectorvectorintmat,intn)
{
inti;
for(i=0;in;i++)
{
for(intj=0;ji;j++)
{
swap(mat[i][j],mat[j][i]);//将行列进行互换
}
}
购买专栏解锁剩余22%