Day02【哔哩哔哩2023校园招聘后端开发方向笔试卷B】螺旋输出矩阵
个人感觉这道题主要就是对于数组越界和循环的考察,在第一次编辑时,考虑数组是否会有越界问题,因为写的do–while–循环,会导致多一次
#include <iostream>
#include <vector>class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param matrix int整型vector<vector<>>* @return int整型vector*/vector<int> SpiralMatrix(vector<vector<int> >& matrix) {// write code hereint i = 0, j = 0;int top = 0, left = 0;int bottom = matrix.size()-1;int right = matrix[0].size()-1;vector<int> newMatrix;do {for (int j = left ; j <= right ; j++ ) {newMatrix.push_back(matrix[top][j]);}top++;// right--;for (i = top ; i <= bottom ; i++) {newMatrix.push_back(matrix[i][right]);}right--;// bottom--;for (j = right; j >= left ; j--) {newMatrix.push_back(matrix[bottom][j]);}bottom--;for (i = bottom ; i >= top; i--) {newMatrix.push_back(matrix[i][left]);}left++;} while (top <= bottom && left <= right);//newMatrix.push_back(matrix[top][right]);// for (i =0; i <newMatrix.size(); i++) {// cout<< newMatrix[i] <<endl;// }return newMatrix;}
};
需要边界检查
可以依然用do–while语句,但是需要判断
#include <iostream>
#include <vector>class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param matrix int整型vector<vector<>>* @return int整型vector*/vector<int> SpiralMatrix(vector<vector<int> >& matrix) {// write code hereint i = 0, j = 0;int top = 0, left = 0;int bottom = matrix.size()-1;int right = matrix[0].size()-1;vector<int> newMatrix;do {//上边界for (int j = left ; j <= right ; j++ ) {newMatrix.push_back(matrix[top][j]);}top++;// right;if(top <= bottom){for (i = top ; i <= bottom ; i++) {newMatrix.push_back(matrix[i][right]);}right--;}// bottom;if(top <= bottom){for (j = right; j >= left ; j--) {newMatrix.push_back(matrix[bottom][j]);}bottom--;}//leftif(left <= right){for (i = bottom ; i >= top; i--) {newMatrix.push_back(matrix[i][left]);}left++;}} while (top <= bottom && left <= right);//newMatrix.push_back(matrix[top][right]);// for (i =0; i <newMatrix.size(); i++) {// cout<< newMatrix[i] <<endl;// }return newMatrix;}
};