leetcode有一类题,虽然题目要求的数据结构方面的难度不高,但是对于思维逻辑的要求很高。
就是找到一个自己觉得非常顺的逻辑慢慢的理顺 然后做下去
涉及的题目
59.螺旋矩阵II
54.螺旋矩阵
剑指Offer 29.顺时针打印矩阵
可以从题目就可以看出来 全是什么旋转螺旋
网上看到的基础知识
这个循环可以转懵很多人!mp.weixin.qq.com/s/Hn6-mlCPvKAdWbiFfQyaaw
题目描述
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
解题思路我是参照教程里面 然后自己得出的自己的看法
感觉就是做这种题的时候你要找到一个规则(循环的规则)
class Solution {
public int[][] generateMatrix(int n) {
/**
* |------>(y)
* |1 2 3
* |4 5 6
* |7 8 9 -->(1,2)->(3,6)->(9,8)->(7,4)
* 左闭右开
* 5单独处理
* 如果数组是双数那么直接就再进行一次顺时针
*/
int[][] translateN = new int[n][n];
int loop = n/2;//计算循环次数
int mid = n/2;
int indexX = 0, indexY = 0;//定义开始的起始位置
int num = 1;//定义放到数组中的数字
int offset = 1;//定义偏差 因为循环是在每一行起始的时候少1
int i,j;
while(loop>0){
i=indexX;
j=indexY;
//顺时针转动
/**
* 处理从左到右
* x不变y变 并且y的上限 圈的长度减offset
* 左闭右开
* */
for (; j < indexY + n - offset; j++) {//j会自动多加一个
translateN[indexX][j] = num++;
}
/**
* 处理从上到下
* y不变 并且x的上限 圈的长度减去offset
* 左闭右开
*/
for(;i < indexX + n - offset; i++){
translateN[i][j] = num++;
}
/**
* 处理从右到左
* x不变 并且y的下限是0 + offset
* 左闭右开
*/
for (; j>indexY; j--) {
translateN[i][j] = num++;
}
//处理从上到下
for (