錯誤原因
- 總體思路有,但不夠清晰,一直在邊調試邊完善。
- 這方面就養成更好的構思習慣,以及漲漲經驗吧。
分析:
思路:找規律
兩個坑:
- 一次循環的后半段是倒著遍歷的
- 是矩陣不是方陣,要考慮行列不同的情況
特殊情況:
- 空矩陣
- 行向量,列向量
#include <type_traits>
class Solution {public:vector<int> printMatrix(vector<vector<int> > matrix) {vector<int> results;// Step0.特殊情況處理:空矩陣if (matrix.size() < 1) return results;// Step1.計算左上,右上,左下的下標int k = 0; // 左上角的下標,每次循環后+1int w_last = matrix[0].size() - 1; // 右上角的下標,每次循環后-1int h_last = matrix.size() - 1; // 左下角的下標,每次循環后-1while (k <= h_last && k <= w_last) { // 本次循環的左上角與右上角重合后 or 左上角與左下角重合后// Step1.順序遍歷上面一行for (int j = k; j <= w_last; j++)results.push_back(matrix[k][j]);// Step2.順序遍歷右邊一行for (int i = k + 1; i <= h_last - 1; i++)results.push_back(matrix[i][w_last]);// Step3.逆序遍歷下面一行if (k < h_last) // 跳出條件:左上角與左下角重合(針對矩陣非方陣的情況,包括行向量)for (int j = w_last; j >= k; j--)results.push_back(matrix[h_last][j]);// Step4.逆序遍歷左邊一行if (k < w_last) // 跳出條件:左上角與右上角重合(針對矩陣非方陣的情況,包括列向量)for (int i = h_last - 1; i >= k + 1; i--)results.push_back(matrix[i][k]);k++;w_last--;h_last--;}return results;}
};