問題形貌
輸入一個矩陣,根據從外向里以順時針的遞次順次打印出每個数字,比方,假如輸入以下矩陣:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
則順次打印出数字
1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
解題
function printMatrix(m)
{
// 傳入的參數為null或許不是數組或許是空數組
if(!m || !Array.isArray(m) || m.length === 0)
return [];
// 傳入的是一維數組
if(!m[0].length)
m = [m]
var left = 0,
right = m[0].length-1,
top = 0,
down = m.length-1;
var res = [];
while(left <= right && top <= down) {
if(top === down) {
for(var i = left;i <= right;i++)
res.push(m[top][i]);
}
else if(left === right) {
for(var i = top;i <= down;i++)
res.push(m[i][left]);
}
else {
var curCol = left, curRow = top;
while(curCol !== right) {
res.push(m[top][curCol++]);
}
while(curRow !== down) {
res.push(m[curRow++][right])
}
while(curCol !== left) {
res.push(m[down][curCol--]);
}
while(curRow !== top) {
res.push(m[curRow--][left]);
}
}
left++;
right--;
top++;
down--;
}
return res;
}