本文共 1746 字,大约阅读时间需要 5 分钟。
class Solution {//key observe: when each component is done, its beginX,endX or beginY,endX will changepublic: vector> generateMatrix(int n) { if(0 == n) return vector >(); vector > result(n, vector (n)); int beginX = 0, endX = n-1; int beginY = 0, endY = n-1; int cur = 1; int nSquare = n*n; while (true) { // From left to right for (int i = beginX; i <= endX; ++i) result[beginY][i] = cur++; if (++beginY > endY) break; // From top down for (int i = beginY; i <= endY; ++i) result[i][endX] = cur++; if (beginX > --endX) break; // From right to left for (int i = endX; i >= beginX; --i) result[endY][i] = cur++; if (beginY > --endY) break; // From bottom up for (int i = endY; i >= beginY; --i) result[i][beginX] = cur++; if (++beginX > endX) break; } return result; }};
second time
class Solution {public: vector> generateMatrix(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function int start = 0; int end = n-1; vector > matrix(n, vector (n, 0)); int curNum = 1; while(start <= end) { //up for(int i = start; i <= end; ++i) matrix[start][i] = curNum++; //right for(int i = start+1; i <= end-1; ++i) matrix[i][end] = curNum++; //bottom if(start != end) for(int i = end; i >= start; --i) matrix[end][i] = curNum++; //left for(int i = end-1; i >= start+1; --i) matrix[i][start] = curNum++; start++; end--; } return matrix; }};
转载地址:http://lqxti.baihongyu.com/