字节一面,问了一道leetcode54题的变种:输入行列大小,输出顺时针遍历顺序。比如输入3、4,代表矩阵是:[1 2 3 4] [5 6 7 8] [9 10 11 12]。可惜之前没刷到这题,虽然最后磕磕绊绊做出来了,但空间复杂度不是最优。面试结束后在百度上也没找到最优解,索性自己做了出来,代码如下
public void spiralOrder(int row, int col) {
int tempRow = row, tempCol = col;
int ptr = 0;
while(tempRow > 0 && tempCol > 0) {
for(int i = 0; i < tempCol; i++) {
ptr++;
System.out.println(ptr);
}
for(int i = 0; i < tempRow - 1; i++) {
ptr += col;
System.out.println(ptr);
}
if(tempRow == 1 || tempCol == 1)
break;
for(int i = 0; i < tempCol - 1; i++) {
ptr--;
System.out.println(ptr);
}
for(int i = 0; i < tempRow - 2; i++) {
ptr -= col;
System.out.println(ptr);
}
tempRow -= 2;
tempCol -= 2;
}
}