目录
概述
最近在力扣碰到一道蛮有趣的题目,经过思考,最终完成了题目,这里分享一下自己的思路。
力扣链接:59. 螺旋矩阵 II - 力扣(LeetCode)
题目描述:
思路来源
寻找规律
根据输入的增长,模拟每个位置的数的变化。
当n=2时:
当n=3时:
当n=4时:
当n=5时:
总结规律
从上面的图中可以发现规律:数据顺时针旋转填入二维数组。步数count = n
1.首先向右走count=n步,count--;
2.循环(下左右上)while(count>0)
先向下count步,再向左count步,count--,再向上count步,再向右count步,count--;
二维数组填入数据:向下,列不变,行+1;向左,行不变,列-1;向上列不变,行-1;向右,行不变,列+1;
3.程序结束
整体代码
#include<iostream>
#include<vector>
using namespace std;
//59 螺旋矩阵,3,3~2=9,1~9顺时针放入一个矩阵,并打印输出。
int main() {
int n;
vector<vector<int>> v;
cin >> n;
for (int i = 0; i < n; i++) {//先初始化二维数组
vector<int> v1;
for (int j = 0; j < n; j++) {
v1.push_back(0);
}
v.push_back(v1);
}
//顺时针 向右列+1,向下行+1,向左列-1,向上行-1
int row = 0;//行 列
int col = 0;
int val = 1;//放入的值
int count = n;//走的步数
//向右 先走n步
for (int i = 0; i < count; i++) {
if (i < count - 1)
v[row][col++] = val++;
else
v[row][col] = val++;
}
count--;
while (count > 0) {
//向下
for (int i = 0; i < count; i++)
v[++row][col] = val++;
//向左
for (int i = 0; i < count; i++)
v[row][--col] = val++;
count--;
//向上
for (int i = 0; i < count; i++)
v[--row][col] = val++;
//向右
for (int i = 0; i < count; i++)
v[row][++col] = val++;
count--;
}
return 0;
}
实现效果