🌻算法,不如说它是一种思考方式🍀
算法专栏: 👉🏻123
一、🌱59. 螺旋矩阵 II
- 题目描述:给你一个正整数
n
,生成一个包含 1 到n
2 所有元素,且元素按顺时针顺序螺旋排列的n
xn
正方形矩阵matrix
。 - 来源:力扣(LeetCode)
- 难度:中等
- 提示:
1 <= n <= 20 - 示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
🌴解题
模拟方向
本题只需要考虑:右 下 左 上,四种走向是循环来的,因此定义一个变量 direction
,分别赋值 0 右,1 下,2 左,3 上,每个走向结束就 +1 再对 4 取余。
右 下 左 上 四个走向其实只需要控制 x
y
坐标的某一个进行加减,主要是判断何时到达边界:数组边界、数组有值。
code:
class Solution {
public int[][] generateMatrix(int n) {
int[][] ans=new int[n][n];
if(n==1) {
ans[0][0] = 1;
return ans;
}
int direction=0;//0右 1下 2左 3上
int i=0,j=-1;//坐标
int k = 1;
boolean tag=true;
while(tag){
switch (direction){
case 0:
j++;
for (; j < n; j++) {
if(ans[i][j]!=0)
break;
ans[i][j]=k;
k++;
}
j--;
direction=(direction + 1) % 4;
if(ans[i+1][j]!=0)
tag=false;
break;
case 1:
i++;
for (; i < n; i++) {
if(ans[i][j]!=0)
break;
ans[i][j]=k;
k++;
}
i--;
direction=(direction + 1) % 4;
if(ans[i][j-1]!=0)
tag=false;
break;
case 2:
j--;
for (; j >=0 ; j--) {
if(ans[i][j]!=0) {
break;
}
ans[i][j]=k;
k++;
}
j++;
direction=(direction + 1) % 4;
if(ans[i-1][j]!=0)
tag=false;
break;
case 3:
i--;
for (; i >=0; i--) {
if(ans[i][j]!=0)
break;
ans[i][j]=k;
k++;
}
i++;
direction=(direction + 1) % 4;
if(ans[i][j+1]!=0)
tag=false;
break;
}
}
return ans;
}
}
返回第一页。☝
陶渊明(352 或 365 年 — 427 年),字元亮,又名潜,私谥“靖节”,世称靖节先生,浔阳柴桑(今江西省九江市)人。东晋末至南朝宋初期伟大的诗人、辞赋家。
☕物有本末,事有终始,知所先后。🍭
🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓