题解 | #顺时针旋转矩阵#
顺时针旋转矩阵
https://www.nowcoder.com/practice/2e95333fbdd4451395066957e24909cc
void ClockwiseMoseACircle(vector<vector<int> >& mat, int n, int start); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param mat int整型vector<vector<>> * @param n int整型 * @return int整型vector<vector<>> */ vector<vector<int> > rotateMatrix(vector<vector<int> >& mat, int n) { // write code here //总共需要旋转多少圈 int leftn = n; int start = 0; while(leftn>0) { for(int i=0; i<leftn-1; i++) { ClockwiseMoseACircle(mat, n, start); } leftn -= 2; start++; } return mat; } }; //一些案例 /* 1--->1 1 2 3 1 3 4 ---> 4 2 1 2 3 4 1 2 4 5 6 7 5 3 7 8 9 ---> 8 9 6 1 2 3 4 13 9 5 1 5 6 7 8 14 9 10 11 12 13 14 15 16 --> */ //思路:先搞出来一圈,将一圈逆时针地置数 //start = 0; endX=n-1-start; endY=n-1-start; void ClockwiseMoseACircle(vector<vector<int> >& mat, int n, int start) { int end = n-1-start; if(start == end) { return; } int leave = mat[start][start]; //第一步:对于start 所在的列 for(int i=start; i<end; i++) { mat[i][start] = mat[i+1][start]; } //第二步:对于end所在的行 for(int i=start; i<end; i++) { mat[end][i] = mat[end][i+1]; } //第三步:对于end所在的列 for(int i=end; i>start; i--) { mat[i][end] = mat[i-1][end]; } //第四步:对于start 所在的行 for(int i=end; i>start; i--) { if(i==start+1) { mat[start][i] = leave; } else { mat[start][i] = mat[start][i-1]; } } }