zoukankan      html  css  js  c++  java
  • 螺旋矩阵问题

    刷的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);
    } 
  • 相关阅读:
    获取mysql数据库中的表信息
    Django Rest Framework --- 分页器组件
    Django Rest Framework --- 频率组件
    Django Rest Framework --- 权限组件
    Django Rest Framework --- 认证组件
    Django Rest Framework --- 视图组件
    序列化组件
    restful规范,cbv源码执行流程,drf之APIView及Respons源码分析
    前后台分离式开发(文件的上传下载),cookie(存放在前台),session(存放在后台)
    ajax,分页器
  • 原文地址:https://www.cnblogs.com/dayq/p/15163913.html
Copyright © 2011-2022 走看看