《LeetCode力扣练习》代码随想录------数组(螺旋矩阵II---Java)
刷题思路来源于 代码随想录
59. 螺旋矩阵 II
左闭右开------[x,y)
java
class Solution {
public int[][] generateMatrix(int n) {
if(n==1){
return new int[][]{{1}};
}
int[][] result=new int[n][n];
int start=0;
int row=-1;
int col=-1;
int loop=0;
int offset=1;
int count=1;
for(;loop<(n/2);loop++){
for(col=start;col<(n-offset);col++){
result[start][col]=count++;
}
for(row=start;row<(n-offset);row++){
result[row][col]=count++;
}
for(;col>start;col--){
result[row][col]=count++;
}
for(;row>start;row--){
result[row][col]=count++;
}
start++;
offset++;
}
if(n%2==1){
result[start][start]=count;
}
return result;
}
}
54. 螺旋矩阵
左闭右开------[x,y)
java
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
int m=matrix.length;
int n=matrix[0].length;
if(m==1&&n==1){
return Collections.singletonList(matrix[0][0]);
}
List<Integer> result=new ArrayList<>();
int startRow=0;
int startCol=0;
int row=-1;
int col=-1;
int offset=1;
int loop=m<n?(m/2):(n/2);
for(;loop>0;loop--){
for(col=startCol;col<(n-offset);col++){
result.add(matrix[startRow][col]);
}
for(row=startRow;row<(m-offset);row++){
result.add(matrix[row][col]);
}
for(;col>startCol;col--){
result.add(matrix[row][col]);
}
for(;row>startRow;row--){
result.add(matrix[row][col]);
}
startRow++;
startCol++;
offset++;
}
if((m<n?m:n)%2==1){
if(n>m){
for(col=startCol;col<=(n-offset);col++){
result.add(matrix[startRow][col]);
}
}else{
for(row=startRow;row<=(m-offset);row++){
result.add(matrix[row][startCol]);
}
}
}
return result;
}
}
LCR 146. 螺旋遍历二维数组
左闭右开------[x,y)
java
class Solution {
public int[] spiralArray(int[][] array) {
int m=array.length;
if(m==0){
return new int[]{};
}
int n=array[0].length;
if(m==1&&n==1){
return new int[]{array[0][0]};
}
int[] result=new int[m*n];
int startRow=0;
int startCol=0;
int row=-1;
int col=-1;
int offset=1;
int loop=(m<n?m:n)/2;
int count=0;
for(;loop>0;loop--){
for(col=startCol;col<(n-offset);col++){
result[count++]=array[startRow][col];
}
for(row=startRow;row<(m-offset);row++){
result[count++]=array[row][col];
}
for(;col>startCol;col--){
result[count++]=array[row][col];
}
for(;row>startRow;row--){
result[count++]=array[row][col];
}
offset++;
startRow++;
startCol++;
}
if((m<n?m:n)%2==1){
if(n<m){
for(row=startRow;row<=(m-offset);row++){
result[count++]=array[row][startCol];
}
}else{
for(col=startCol;col<=(n-offset);col++){
result[count++]=array[startRow][col];
}
}
}
return result;
}
}