[leetcode 59] Spiral Matrix II--------数组转圈赋值

Question:

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/2圈即可。

因为矩阵是n*n,所以起点横坐标与纵坐标相等,一圈四个边,所以走四个遍历即可。注意判断循环中的起始点和结束点,与保存。


代码如下:

<span style="font-size:14px;">class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
         vector<vector<int>> res(n,vector<int>(n));
         if(n <= 0){
             return res;
         }
         helper(res,0,n);
         return res;
    }
    void helper(vector<vector<int>>& res,int pos,int n){
        if(pos > n/2)
            return ;
        int j,i;
        for(i = pos; i < n-pos; ++i){//上边的行
            res[pos][i] = res[pos][i-1] + 1;
        }
        --i;
        for(j = pos + 1; j < n-pos; ++j){//右边的列
            res[j][i] = res[j-1][i] + 1;
        }
        --j;
        for(i = i - 1; i >= pos; --i){//下边的行
            res[j][i] = res[j][i+1] + 1;
        }
        ++i;
        for(j = j - 1; j > pos; --j){//左边的列
            res[j][i] = res[j+1][i] + 1;
        }
        helper(res,pos+1,n);
    }
};</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值