順時(shí)針打印矩陣
題目描述
輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數(shù)字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
思路
- 選坐標(biāo)為(0,0),(1,1)...的點(diǎn)記為(start,start),作為開始坐標(biāo),下一圈開始坐標(biāo)為(start+1,start+1);
- 判斷是否進(jìn)入下一圈(即是否打印完成)的條件是rows>start*2 && cols>start*2;
- 打印一圈的左上角坐標(biāo)為(start,start),右下角的坐標(biāo)為(cols-start-1,rows-start-1)
- 根據(jù)一圈左上角和右下角坐標(biāo)判斷“從左到右”,“從上到下”,“從右到左”,“從下到上”需要打印的點(diǎn)。
實(shí)現(xiàn)代碼
function printMatrix(matrix) {
if (matrix == null || matrix.length == 0) {
return;
}
var rows = matrix.length;
var cols = matrix[0].length;
var start = 0;
var result = [];
while (cols > start * 2 && rows > start * 2) {
var endX = cols - 1 - start;
var endY = rows - 1 - start;
//從左到右打印一行
for (var i = start; i <= endX; i++) {
result.push(matrix[start][i]);
}
//從上到下打印一行
if (start < endY) {
for (var i = start + 1; i <= endY; i++) {
result.push(matrix[i][endX]);
}
}
//從右到左打印一行
if (start < endX && start < endY) {
for (var i = endX - 1; i >= start; i--) {
result.push(matrix[endY][i]);
}
}
//從下到上打印一行
if (start < endX && start < endY - 1) {
for (var i = endY - 1; i >= start + 1; i--) {
result.push(matrix[i][start]);
}
}
start++;
}
return result
}