螺旋矩阵问题
2021/8/19 23:08:35
本文主要是介绍螺旋矩阵问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
刷的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); }
这篇关于螺旋矩阵问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?