59.螺旋矩阵Ⅱ

这题不简单,考察想象力和对边界的把控,最好是结合图来推理,感觉第一次做很难完美做出来。注意区间要遵循 左闭右开 原则,虽然 左闭右开、左开右闭、左闭右闭、左开右开 进行合适的组合也能做出来,但是不好。
这次是我代码写得最美的一次

class Solution {
    
    
public:
    vector<vector<int>> generateMatrix(int n) {
    
    
        vector<vector<int>> result(n, vector<int>(n, 0));
        int start_x = 0, start_y = 0, circle = 1, debuff = 1, count = 1;
        while (circle <= n / 2) {
    
    
            for (int i = start_x, j = start_y; j < n - debuff; ++j) {
    
    
                result[i][j] = count++;
            }
            for (int i = start_x, j = n - debuff; i < n - debuff; ++i) {
    
    
                result[i][j] = count++;
            }
            for (int i = n - debuff, j = n - debuff; j > start_y; --j) {
    
    
                result[i][j] = count++;
            }
            for (int i = n - debuff, j = start_y; i > start_x; --i) {
    
    
                result[i][j] = count++;
            }
            ++start_x, ++start_y; ++circle; ++debuff;
        }
        if (n % 2 != 0) result[n / 2][n / 2] = n * n;
        return result;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_54721509/article/details/127875417