程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> [LeetCode從零單刷]Spiral Matrix II

[LeetCode從零單刷]Spiral Matrix II

編輯:關於C++

題目:

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

 

解答:

重要的是找到循環的規律:每層環都可以由四個部分組成,第一個環每部分長為(n-1),第二個環每部分長為(n-3)…(n-2k)… 如下圖所示:

width=200px/

對於奇數與偶數不同的地方在於:奇數螺旋矩陣的最中間僅有一個部分組成,取值為 n;偶數螺旋矩陣的最中間仍然是四個部分。

 

class Solution {
public:
    vector> generateMatrix(int n) {
        vector row(n, 0);
        vector> ans(n, row);
        if(n <= 0)  return ans;
        
        int x = 0, y = 0;
        int num = 0;
        int a, b, c, d;
        for(int i=n-1; i>=0; i=i-2)
        {
            if(i == 0)  ans[x][y] = n*n;
            else
            {
                for(a = 0; a < i; a++)
                {
                    ans[x][y+a] = ++num;
                }
                y = y + i;
                
                for(b = 0; b < i; b++)
                {
                    ans[x+b][y] = ++num;
                }
                x = x + i;
                
                for(c = 0; c < i; c++)
                {
                    ans[x][y-c] = ++num;
                }
                y = y - i;
                
                for(d = 0; d < i; d++)
                {
                    ans[x-d][y] = ++num;
                }
                x = x - i + 1;
                y = y + 1;
            }
        }
        return ans;
    }
};

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved