背景
有这么一道面试题,让顺时针输出一个二维矩阵。
思路
记录开始行开始列和结束行结束列,做为输出的边界
除了要输出的矩阵,我还设置了一个状态矩阵,用来记录矩阵中某一个元素输出与否,没有输出过的元素,才进行输出
实现
测试用的矩阵:
123
123
123
123
代码如下:
扫描二维码关注公众号,回复:
4649516 查看本文章
public class ExampleUnitTest {
int[][] matrix = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
int[][] hasPrintedMatrix = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
@Test
public void addition_isCorrect() throws Exception {
int endLine = 3, endColumn = 2;
int startLine = 0, startColumn = 0;
int i, j;
while (startLine <= endLine && startColumn <= endColumn) {
i = startLine;
j = startColumn;
// 从左上往右上
for (; j < endColumn + 1; j++) {
printData(i, j);
}
j--;
i++;
// 从右上往右下
for (; i < endLine + 1; i++) {
printData(i, j);
}
i--;
j--;
// 从右下到左下
for (; j > startColumn - 1; j--) {
printData(i, j);
}
i--;
j++;
// 从左下到左上
for (; i > startLine; i--) {
printData(i, j);
}
startLine++;
startColumn++;
endColumn--;
endLine--;
}
}
private void printData(int i, int j) {
if (hasPrintedMatrix[i][j] == 0) {
System.out.print(matrix[i][j] + " ");
hasPrintedMatrix[i][j] = 1;
}
}
}
结果
结语
方法似乎笨拙了一些,但……至少解决了问题