CC面试经典案例矩形旋转

北京皮肤病防治医院 http://pf.39.net/bdfyy/bdfhl/210719/9204079.html

引言

作为码农,我们需要对各种类型的代码都有所了解,这样才会在面对客户的各种需求时不至于手忙脚乱,能够从容应对客户的各种需求,从而保住自己的饭碗。本节以巨型旋转作为示例进行讲解。

代码需求

需求描述:

有一个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%


转载请注明:http://www.aierlanlan.com/cyrz/3544.html