题解 | #c++ 旋转矩阵#
顺时针打印矩阵
http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a
class Solution {
public:
vector<int> printMatrix(vector<vector<int>> matrix) {
vector<int> result;
if(matrix.empty()){
return result;
}else{
result = rotatePrint(matrix);
}
return result;
}
/*******************本题目解函数******************/
/*方法一:逆时针旋转:*/
/* 1. 旋转前删除第一行,计入结果res*/
/* 2. 开始第一次旋转 */
/* 3. 开始下一次前先删除,计入结果 */
/* 4. 直到矩阵的size为1终止,并将最后的结果推入 */
vector<int> rotatePrint(vector<vector<int>> matrix){
vector<vector<int>> result;result = matrix;vector<int> res;
while(result.size()!=0){
for(int i = 0;i<result[0].size();i++){
res.push_back(result[0][i]);
}result.erase(result.begin(),result.begin()+1);
if(!result.empty()){
result = anti_roteMatrix90(result);
}
}
return res;
}
/**************一系列函数*****************/
/*包括:顺时针,逆时针旋转90度、旋转m圈*/
/*将矩阵顺时针,逆时针转m圈*/
vector<vector<int>> roteMatrixM(vector<vector<int>> matrix,int k,
vector<vector<int>> result){
int total = k%4;//转90度转4圈等于没转
if(total == 0){
return matrix;
}result = matrix;
while(total>0){
result = roteMatrix90(result);
total--;
}return result;
}
/*顺时针90度*/
vector<vector<int>> roteMatrix90(vector<vector<int>> matrix){
/*记录长宽*/
int len = matrix[0].size();int wid = matrix.size();
/*新矩阵,用来记录旋转后的矩阵*/
vector<vector<int>> result(len);
if(matrix.empty()){
return result;
}if(len*wid == 1){
return matrix;
}for(int j = 0;j<len;j++){
for(int i = wid-1;i>=0;i--){
result[j].push_back(matrix[i][j]);
}
}return result;
}
/*逆时针旋转90度*/
vector<vector<int>> anti_roteMatrix90(vector<vector<int>> matrix){
int len = matrix[0].size();int wid = matrix.size();
vector<vector<int>> result(len);
if (matrix.empty()){
return result;
}if(len*wid == 1){
return matrix;
}for(int j = len-1;j>=0;j--){
for(int i = 0;i<wid;i++){
result[len-j-1].push_back(matrix[i][j]);
}
}return result;
}
};
};