首页 > 其他 > 详细

螺旋矩阵问题

时间:2021-08-20 09:22:20      阅读:14      评论:0      收藏:0      [点我收藏+]

刷的leetcode中的题,其实之前写过一篇,不过当时的写法比较傻,遇见矩阵大一点的貌似就有问题。

这次再刷到一样的题目,就重新写了一下。

技术分享图片

 

 

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路:
一圈一圈的递归走下去就好了。
然后每一圈都分为上下左右4个方向前进。
我们要做的,就是做好上下左右的操作
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    void setValue(int point,int value,int size,vector<vector<int>>& v)
    {
        if(size<0)
        {
            return;
        }
        if(size==1)
        {
            v[point][point] = value;
            return;
        }
//        cout<<"point = "<<point<<" value = "<<value<<" size = "<<size<<endl;
        int total = 4*size-4;
        int array[4] = {};//对应上下左右中要计算的次数 
        array[0] = size;
        array[1] = 2*size - 2;//其实没有用到,直接简化成了2*size-2-size = size-2
        array[2] = 3*size - 2;
        array[3] = 4*size - 4;
        int nowindex = size;
        int y1 = point+size-1;
        for(int i=0;i<4;i++)
        {
            if(i==0)
            {
                for(int j=0;j<size;j++)//y不变,x++;
                {
                    nowindex = point + j;
                    v[point][nowindex] = value++;
                }
            }
            else if(i==1)
            {
                for(int j=0;j<size-2;j++)//x不变,y++ 
                {
                    nowindex = size + j;
                    v[point+1+j][y1] = value++;
                }
            }
            else if(i==2)
            {
                for(int j=0;j<size;j++)//y不变,x-- 
                {
                    v[y1][y1-j]=value++;
                }
            }
            else if(i==3)
            {
                for(int j=0;j<size-2;j++)//x不变,y-- 
                {
                    v[y1-1-j][point]=value++;
                }
            }
        }
        point++;
        size = size - 2;
        setValue(point,value,size,v);
    }
    vector<vector<int>> generateMatrix(int n) {
        vector<int> v1;
        vector<vector<int>> v;
        v1.resize(n);
        for(int i=0;i<n;i++)
        {
            v.push_back(v1);
        }
        setValue(0,1,n,v);
//        for(auto i:v)
//        {
//            for(auto j:i)
//            {
//                cout<<j<<" ";
//            }
//            cout<<endl;
//        }
        return v;
    }
};
int main()
{
    Solution s;
    s.generateMatrix(4);
} 

 

螺旋矩阵问题

原文:https://www.cnblogs.com/dayq/p/15163913.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!