首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode Spiral Matrix II:生成螺旋矩陣

     編輯:關於C++

題目描述

給定整數 n,生成 n x n 矩陣,元素 1 到 n² 按順時針螺旋填入。例 n=3:


[ [1,2,3],
  [8,9,4],
  [7,6,5] ]

解法:分層填充

每層環由四段組成:右、下、左、上。第 k 層(從 0 起)每段長度 n - 2k - 1。奇數 n 中心單獨填 n²。

螺旋分層

C++ 實現


class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> ans(n, vector<int>(n));
        if (n <= 0) return ans;
        int x = 0, y = 0, num = 0;
        for (int len = n - 1; len >= 0; len -= 2) {
            if (len == 0) { ans[x][y] = n * n; break; }
            for (int i = 0; i < len; ++i) ans[x][y+i] = ++num; // 右
            y += len;
            for (int i = 0; i < len; ++i) ans[x+i][y] = ++num; // 下
            x += len;
            for (int i = 0; i < len; ++i) ans[x][y-i] = ++num; // 左
            y -= len;
            for (int i = 0; i < len; ++i) ans[x-i][y] = ++num; // 上
            x = x - len + 1; y += 1; // 進入下一層起點
        }
        return ans;
    }
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved