题目要求
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
思路:
1)按照从左到右,从上到下,从右到左,从下到上的顺序
2)每次经过边界,都要更改边界值,实质上是不断缩小矩阵的边界。
3)贴一个大佬代思路以及代码供参考:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/solution/mian-shi-ti-29-shun-shi-zhen-da-yin-ju-zhen-she-di/
个人解答:
public static int[] solution(int [][] matrix){
int row = matrix.length; //行数
if(row == 0) return new int[0];
int col = matrix[0].length; //列数
int leng = row * col; //元素个数
int [] array = new int[leng]; //存放元素需要的数组
int row_beg = 0; //行起始
int row_fin = row; //行结束
int col_beg = 0; //列起始
int col_fin = col; //列结束
int i,j;
int num = 0; //定位将matrix中的放到array中指定位置
while (leng >=0){
for(j=col_beg;j<col_fin;j++){
array[num++] = matrix[row_beg][j];
leng --;
}
row_beg++;
if(leng == 0)break;
for(i=row_beg;i<row_fin;i++) {
array[num++] = matrix[i][col_fin - 1];
leng --;
}
col_fin--;
if(leng == 0)break;
for(j = col_fin-1;j >= col_beg;j--){
array[num++] = matrix[row_fin-1][j];
leng --;
}
row_fin--;
if(leng == 0)break;
for(i = row_fin-1;i >= row_beg;i--){
array[num] = matrix[i][col_beg];
leng--;
}
col_beg++;
if(leng == 0)break;
}
return array;
}
小结:
看了一下案例大佬的代码,思路基本一致,大佬代码确实非常精简。毕竟是第一次做题,后期注意代码风格与质量。不得不说,解决问题的感觉真实非常爽。