[编程题] lk 剑指 Offer 29. 顺时针打印矩阵
题目信息
思路
定义上下左右边界,循环打印
注意
如何返回一个空的数组的问题。借助stream把list转一下。
Java代码
import java.util.*;
import java.util.stream.*;
class Solution {
public int[] spiralOrder(int[][] matrix) {
//解决无法传入空数组的情况
if(matrix==null || matrix.length==0) {return new ArrayList<Integer>().stream().mapToInt(Integer::intValue).toArray();}
//定义边界
int left = 0;
int right = matrix[0].length-1;
int up = 0;
int down = matrix.length-1;
int[] res = new int[(right+1)*(down+1)];
int index=0;
while(true){
//右
for(int i=left;i<=right;i++){
res[index++] = matrix[up][i];
}
if(++up > down) break;
//下
for(int i=up;i<=down;i++){
res[index++] = matrix[i][right];
}
if(--right<left) break;
//左
for(int i=right;i>=left;i--){
res[index++] = matrix[down][i];
}
if(--down < up) {break;}
//上
for(int i=down;i>=up;i--){
res[index++] = matrix[i][left];
}
if(++left>right) break;
}
//上边定义为数组了,把数组转为List返回(牛客的输出)
//return (ArrayList<Integer>)Arrays.stream(res).boxed().collect(Collectors.toList());
return res;
}
}