【刷算法】順時針打印矩陣

問題形貌

輸入一個矩陣,根據從外向里以順時針的遞次順次打印出每個数字,比方,假如輸入以下矩陣:

 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;
}





    原文作者:亞古
    原文地址: https://segmentfault.com/a/1190000015372027
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞